本文共 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
QList:最常用,内部由数组实现,访问快;
QLinkedList:真正的链表,与迭代器配合使用; QVector:连续空间存储,插入操作慢; QStack:后进先出(LIFO)在QVector基础上增加新的接口——push()、pop()、top(); QQueue:先进先出(FIFO)在QList基础上增加新的接口——enqueue()、dequeue()、head();QMap:基于红黑树的字典,以键key顺序存储;
QMultiMap:一个键对应多个值的QMap; QHash:基于哈希表的字典,查找快,不是顺序存储; QMultiHash:一个键对应多个值的QHash; QSet:内部由QHash实现,查找速度快; QCache:可以设置缓存大小,超出后自动删除旧的对象; QContiguousCache:与QCache的不同点,缓存中的元素是连续的;1、基于通用模板;
2、隐式共享、可重入; 3、在所有线程只读时,是线程安全的; 4、容器中的值:可分配数据类型(类型必须提供复制构造函数和赋值运算符),包括基本类型(如int、double、指针类型)和Qt数据类型(如QString、QDate、QTime),但不包括QObject或任何QObject子类。如不能使用QWidget作为数据类型,应该使用QWidget*。 5、容器中数据类型要求的运算符重载:operator<<()、operator>>(),QMap的key还要求operator<();容器 | 只读 | 读写 |
---|---|---|
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> |
例子
QListlist;list << "A" << "B" << "C" << "D";QListIterator i(list);while (i.hasNext()) qDebug() << i.next();
迭代器常用函数
toFront():将迭代器移到列表的最前面(在第一项之前); toBack():将迭代器移到列表的末尾(最后一项之后); hasNext():如果迭代器后面有元素,返回true; next():返回下一项,并将迭代器后移; peekNext(): 返回下一项,而不移动迭代器 hasPrevious(): 如果迭代器前面有元素,返回true; previous():返回上一项,并将迭代器前移; peekPrevious() 返回上一项,而不移动迭代器;容器 | 只读 | 读写 |
---|---|---|
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 |
例子:
QListlist;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/