首页 > 其他分享 >Qt QList使用总结

Qt QList使用总结

时间:2024-02-27 20:01:00浏览次数:21  
标签:总结 Qt 删除 链表 索引 QList 节点

概述
QList是Qt的泛型容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问以及基于索引的插入和删除。
QList、QLinkedList 和 QVector 提供了类似的 API 和功能。它们通常是可互换的,但性能有所区别。

QVector 应该是默认首选的容器
QList是最广泛用于Qt API中传递值的容器
QList不是指针结构体类型的链表,真正的结构体指针链表是 QLinkedList
一、QList 声明及初始化
QList可以保存基本数据类型的,如int,double,bool等;但是在存储QObject对象及其子类对象时,不能直接存对象本身,而是只能存对象的地址;

1. 声明 QList
声明简单:

1 //基本数据类型
2 QList<int> integerList;
3 QList<QDate> dateList;
4 
5 //存储QObject对象的地址
6 QList <QWidget *> ptr_widgets;
7 QList <QObject *> ptr_objects;

2. 初始化 QList

初始化也很简单;若没初始化,链表默认为空的。

1 QList<QString> list = { "one", "two", "three" };
2 
3 QWidget * widget1 = new QWidget();
4 QWidget * widget2 = new QWidget();
5 QList<QWidget *> ptr_widgets = {widget1, widget2};

二、QList 基本的 增加、删除、移动、修改
QList 在有些实现都是需要多个基本操作组合来实现的,不同的实现用的方法也不一致,Qt提供的都是最核心、最单一的功能。

1. 增加节点

  • insert():插入节点到
  • append():尾部添加节点
  • prepend() :头部添加节点
  • operator <<():尾部添加节点或链表
  • operator+=():尾部添加节点

2. 删除节点

  • removeAt():删除节点
  • removeFirst():删除头节点
  • removeLast():删除尾节点

3. 移动节点

  • move():链表内移动节点位置
  • swap():俩个链表交换值(其实交换一下地址映射就能实现)

4. 修改节点值

  • replace():替换链表内的节点值

三、QList 定位节点
QList是有序的链表,可以通过索引来得到

  • operator [ ] 数组索引符:这个和普通数组一样的使用 [ ] 访问下标方法一致
  • at() 函数:也是通过索引值,也即是下标方式

Qt 推荐使用at()函数,这样的效率更好,因为 at()函数不会发生 深拷贝 ,而另外一种方式会。

QList还提供了一些快捷的 索引 + 返回索引节点 + 删除原索引节点,也就是组合的功能;但是这个是 take…不是get…这样的,这就意味着,这个其实是✂剪掉一个节点,并返回

  • takeAt():取得在指定位置的节点
  • takeFirst():取得头节点 ;等价【takeAt(0)】
  • takeLast():取得尾节点

四、QList 的基本信息

  • contains():是否包含节点xxx
  • count():对指定节点值计数
  • isEmpty():链表为空?
  • size():链表大小?
  • indexOf():节点位置?

等等。。。常用功能

但是有些功能就需要组合一下就行
其他功能还需要看帮助文档

五、QList 迭代器功能
有两种迭代器的风格

  • Java style
  • STL style

区别确实有,但是不大;
官方说的性能来看:STL风格的更强大;毕竟能融入算法模块;
但Java的风格更加人性化,更容易使用些,性能也不差,平常代码完全能胜任了。

标签:总结,Qt,删除,链表,索引,QList,节点
From: https://www.cnblogs.com/ybqjymy/p/18037775

相关文章

  • Qt QVector和vector以及QMap和map的遍历性能对比
    使用Qt中的容器给C++开发带来很大的便利,而且QVector和QMap等容器扩展的一些成员函数也是很方便的。但是Qt的这些容器和STL库的容器比,效率到底怎么样?我就写了几个简单的遍历的例子,测试了QVector、vector等容器的那些方法效率更高。测试环境:系统:windows10编译器:MingGWmingw......
  • Qt 开发经验常见问题及优化100条
    01:001-010当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了。比如我们可能就写错了一行代码,编译提示几百个错误,你只要把这一行纠正了,其他错误也就没了。定时器是个好东西,学会好使......
  • 代码随想录算法训练营第三十天|回溯法总结
    回溯法总结回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等代码随想录(programmerc......
  • NOIP2023游记及总结
    Part1游记某学校初一学生,坐标SN,第一次考NOIP,内心紧张无比。Day-5~Day-3期中考试。为了竞赛,政史地生都没背,慌。Day-1期中考试出成绩,被同机房大佬暴甩10.5,明天就要NOIP了,紧张,波波还在训练,晚上写作业到0点,险些失眠。Day17:50进考场前,波波让我们拍照留念,那一刻,我有点想......
  • Qt QList的用法
    在Qt中,QList 是一个常用的容器类,用于存储元素的动态数组。以下是简单的QList用法:1、包含头文件在使用QList之前,确保包含相应的头文件。#include<QList>2、创建QList对象使用QList模板创建一个对象,并指定存储的数据类型。QList<int>myList;//创建一个......
  • Qt QString的isEmpty与isNull区别
    1.isEmpty()如果字符串没有字符,则返回true;否则返回false。1QString().isEmpty();//returnstrue2QString("").isEmpty();//returnstrue3QString("ABC").isEmpty();//returnsfalse2.isNull如果字符串是无效的,则返回true;否则返回false。1QString().is......
  • Qt QVector、QList、QSet和QMap:性能与用途比较
    Qt提供了多种容器类,用于存储和管理数据。其中,QVector、QList、QSet和QMap是最常用的几种。这些容器类在性能和用途方面存在一些差异,选择合适的容器对于提高应用程序的效率和正确性至关重要。下面我们将从以下几个方面对这四种容器进行比较:1.存储方式QVector:动态数组,元素在......
  • Qt 常见数据结构详解:从基本框架到实际应用
    在Qt框架中,数据结构的选择对于提高代码效率和性能至关重要。正确地使用数据结构可以显著提高应用程序的效率和响应速度。下面我们将详细介绍Qt中常见的几种数据结构,包括QString、QList、QVector、QMap、QHash、QSet和QPair。1.QStringQString是Qt中用于处理字符串的类。......
  • spark总结
    Spark是什么学习一个东西之前总要知道这个东西是什么。Spark是一个开源的大数据处理引擎,它提供了一整套开发API,包括流计算和机器学习。它支持批处理和流处理。Spark的一个显著特点是它能够在内存中进行迭代计算,从而加快数据处理速度。尽管Spark是用Scala开发的,但它也为......
  • 毕设6:总结
    呃好久没写了感觉没什么好写的,然后做完了(1.List的add只是一个接口,并没有实现,各种操作请认准arraylist。2.关于Task一个JavaFX异步执行的类,但请单独开一个线程给它不然还是同步的。3.关于TreeView界面乱跳的问题treeitemexpend的时候会展示父节点和尽量多的子节点,但可能是......