博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Qt】Qt容器总结
阅读量:4263 次
发布时间:2019-05-26

本文共 2374 字,大约阅读时间需要 7 分钟。

目录

注意:

由于Qt的容器是写时复制的,因此非const访问器从本质上讲更加昂贵,因为它们必须首先检查是否需要复制基础数据(并在必要时进行复制)。因此,在Qt中,at(i)速度会快于operator[]。令人遗憾的是,这与STL相反,例如,STL std::vector
::at(i)会进行边界检查,因此比稍贵std::vector
::operator[](i)。

参考官网:https://doc.qt.io/qt-5/containers.html

一、容器类

1、顺序容器

QList:最常用,内部由数组实现,访问快;

QLinkedList:真正的链表,与迭代器配合使用;
QVector:连续空间存储,插入操作慢;
QStack:后进先出(LIFO)在QVector基础上增加新的接口——push()、pop()、top();
QQueue:先进先出(FIFO)在QList基础上增加新的接口——enqueue()、dequeue()、head();

2、关联容器

QMap:基于红黑树的字典,以键key顺序存储;

QMultiMap:一个键对应多个值的QMap;
QHash:基于哈希表的字典,查找快,不是顺序存储;
QMultiHash:一个键对应多个值的QHash;
QSet:内部由QHash实现,查找速度快;
QCache:可以设置缓存大小,超出后自动删除旧的对象;
QContiguousCache:与QCache的不同点,缓存中的元素是连续的;

二、Qt容器特点

1、基于通用模板;

2、隐式共享、可重入;
3、在所有线程只读时,是线程安全的;
4、容器中的值:可分配数据类型(类型必须提供复制构造函数和赋值运算符),包括基本类型(如int、double、指针类型)和Qt数据类型(如QString、QDate、QTime),但不包括QObject或任何QObject子类。如不能使用QWidget作为数据类型,应该使用QWidget*。
5、容器中数据类型要求的运算符重载:operator<<()、operator>>(),QMap的key还要求operator<();

三、迭代器

1、Jave样式的迭代器(效率略低)
容器 只读 读写
QList QQueue QListIterator QMutableListIterator
QLinkedList QLinkedListIterator QMutableLinkedListIterator
QVector, QStack QVectorIterator QMutableVectorIterator
QSet QSetIterator QMutableSetIterator
QMap<Key, T>, QMultiMap<Key, T> QMapIterator<Key, T> QMutableMapIterator<Key, T>
QHash<Key, T>, QMultiHash<Key, T> QHashIterator<Key, T> QMutableHashIterator<Key, T>

例子

QList
list;list << "A" << "B" << "C" << "D";QListIterator
i(list);while (i.hasNext()) qDebug() << i.next();

迭代器常用函数

toFront():将迭代器移到列表的最前面(在第一项之前);
toBack():将迭代器移到列表的末尾(最后一项之后);
hasNext():如果迭代器后面有元素,返回true;
next():返回下一项,并将迭代器后移;
peekNext(): 返回下一项,而不移动迭代器
hasPrevious(): 如果迭代器前面有元素,返回true;
previous():返回上一项,并将迭代器前移;
peekPrevious() 返回上一项,而不移动迭代器;

2、SLT样式的迭代器
容器 只读 读写
QList, QQueue QList::const_iterator QList ::iterator
QLinkedList QLinkedList::const_iterator QLinkedList::iterator
QVector, QStack QVector::const_iterator QVector::iterator
QSet QSet::const_iterator QSet::iterator
QMap<Key, T>, QMultiMap<Key, T> QMap<Key, T>::const_iterator QMap<Key, T>::iterator
QHash<Key, T>, QMultiHash<Key, T> QHash<Key, T>::const_iterator QHash<Key, T>::iterator

例子:

QList
list;list << "A" << "B" << "C" << "D";QList
::iterator i;for (i = list.begin(); i != list.end(); ++i) *i = (*i).toLower();

迭代器常用函数

*i :返回当前项;
++i :迭代器移到后一项;
i += n :迭代器移到后n项;
–i :迭代器移到前一项;
i -= n 迭代器移到前n项;
i - j : 返回迭代器i和j之间的项目数

转载地址:http://qbmei.baihongyu.com/

你可能感兴趣的文章
指针函数和冒泡排序法算法案例
查看>>
批处理修改地址为静态和动态的方法
查看>>
easyui $.messager.alert失效问题
查看>>
android studio 删除module
查看>>
android jsbridge实现原理简述
查看>>
java继承中的重写和隐藏
查看>>
java内部类为什么可以访问外部类属性方法
查看>>
StringBuilder StringBuffer 如何清空
查看>>
android软键盘弹起面试题
查看>>
HashMap实现原理和扩容及高版本优化
查看>>
java集合之LinkedHashMap解析
查看>>
Messenger和aidl的关系&aidl支持多线程吗,messenger呢
查看>>
AndroidManifest.xml文件何时被加载?如何查看apk的AndroidManifest
查看>>
如何判断一个对象是否可回收,GC回收对象的过程方式,finilized函数
查看>>
java普通for循环和增强for循环中做集合增删会不会出错?
查看>>
抽象类和接口区别
查看>>
JVM学习之对象内存布局,对象头
查看>>
Python urllib模块访问网络
查看>>
JVM学习之java线程安全&锁优化技术
查看>>
兼容ProgressBar圆形设置颜色
查看>>