概述
QList是Qt的泛型容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问以及基于索引的插入和删除。 QList、QLinkedList 和 QVector 提供了类似的 API 和功能。它们通常是可互换的,但性能有所区别。
- QVector 应该是默认首选的容器
- QList是最广泛用于Qt API中传递值的容器
- QList不是指针结构体类型的链表,真正的结构体指针链表是 QLinkedList
一、QList 声明及初始化
QList可以保存基本数据类型的,如int,double,bool等;但是在存储QObject对象及其子类对象时,不能直接存对象本身,而是只能存对象的地址;
1. 声明 QList
声明简单:
QList<int> integerList;
QList<QDate> dateList;
QList <QWidget *> ptr_widgets;
QList <QObject *> ptr_objects;
2. 初始化 QList
初始化也很简单;若没初始化,链表默认为空的。
QList<QString> list = { "one", "two", "three" };
QWidget * widget1 = new QWidget();
QWidget * widget2 = new QWidget();
QList<QWidget *> ptr_widgets = {widget1, widget2};
二、QList 基本的 增加、删除、移动、修改
QList 在有些实现都是需要多个基本操作组合来实现的,不同的实现用的方法也不一致,Qt提供的都是最核心、最单一的功能。
1. 增加节点
- insert():插入节点到
- append():尾部添加节点
- prepend() :头部添加节点
- operator <<():尾部添加节点或链表
- operator+=():尾部添加节点
2. 删除节点
- removeAt():删除节点
- removeFirst():删除头节点
- removeLast():删除尾节点
3. 移动节点
- move():链表内移动节点位置
- swap():俩个链表交换值(其实交换一下地址映射就能实现)
4. 修改节点值
三、QList 定位节点
QList是有序的链表,可以通过索引来得到
- operator [ ] 数组索引符:这个和普通数组一样的使用 [ ] 访问下标方法一致
- at() 函数:也是通过索引值,也即是下标方式
Qt 推荐使用at()函数,这样的效率更好,因为 at()函数不会发生 深拷贝 ,而另外一种方式会。
QList还提供了一些快捷的 索引 + 返回索引节点 + 删除原索引节点,也就是组合的功能;但是这个是 take…不是get…这样的,这就意味着,这个其实是?剪掉一个节点,并返回
- takeAt():取得在指定位置的节点
- takeFirst():取得头节点 ;等价【takeAt(0)】
- takeLast():取得尾节点
四、QList 的基本信息
- contains():是否包含节点xxx
- count():对指定节点值计数
- isEmpty():链表为空?
- size():链表大小?
- indexOf():节点位置?
等等。。。常用功能
但是有些功能就需要组合一下就行 其他功能还需要看帮助文档
五、QList 迭代器功能
有两种迭代器的风格
区别确实有,但是不大; 官方说的性能来看:STL风格的更强大;毕竟能融入算法模块; 但Java的风格更加人性化,更容易使用些,性能也不差,平常代码完全能胜任了。
|