Qt容器类

mac2024-07-26  58

      Qt中容器大体分为两大类:线性和关联。

线性容器:

QList:数据都是顺序存储的,最常用的是QList,本质是一个数组,但是可以快速的进行头插和尾插。可以进行索引访问,append()/prepend()两端添加,insert()中间插入,数据小于1000时推荐。QLinkedList:使用迭代器索引、向中间插入一个很大的数据时使用QLinkedList。QVector:如果使用连续的内存空间,则使用QVector。这样的类型在头和中间插入一个数据时很慢的。QStack:是QVector的一个便捷子类,后进先出。添加有push()、 pop()、 top()等函数。QQueue:是QList的一个便捷子类,先进先出。添加有enqueue()、 dequeue()、 head()等函数 QList<QString>list; list << "z" << "x" << "c"; if(list[1] == 'z'){ list.replace(2, "sa"); } for(int i=0; i<list.size(); ++i){ qDebug() << list.at(i); } list.append("qq"); list.prepend("ww"); list.insert(2, "xx"); list.swap(1,3); list.contains("mm"); list.count("mm"); list.indexOf("mm");

关联容器:(存储类型<键,值>)

QMap:一个键关联一个值,顺序的存储数据。QMultiMap:QMap的便捷类,一个键对应多个值。QHash:和QMap的接口相同,但是查找速度更快,因为它的存储是乱序。QMultiHash:QHash的便捷类,一个键对应多个值。QSet:可以快速查询单值的数学集。 QMap<QSting, int>map; map["one"] = 1; map.insert("six", 6); int value = map["six"]; int value1 = map.value("six"); map.contains("six"); map.insert("five", 5); map.insertMulti("two", 2); map.insertMulti("two", 4); QMultiMap<QString, int>map1, map2, map3; map1.insert("value", 1); map2.insert("value", 2); map3.insert("value", 3); map3 = map1 + map2;

遍历容器

       可以使用地带器来完成,迭代器提供了一个统一的接口去访问容器中的数据。迭代器有Java迭代器和STL迭代器,如果单是顺序遍历则使用Qt的关键字foreach,STL的速度快于Java格式的,只读的又快于读写的。

      迭代器则在容器后添加Iterator,例如QList<T>类型的迭代器为QListIterator<T>。

Java迭代器常用API:

toFont():迭代器移动到列表的最前面(第一个项目之前)。toBack():迭代器移动到列表的最后面(最后一个项目之后)。hasNext():如果迭代器没有到达列表的最后面,则返回true。next():返回下一个项目,并使迭代器前移一个位置。peekNext():返回下一个项目,但不移动迭代器。hasPrevious():如果迭代器没有到达列表的最前,则返回true。previous():返回前一个项目,并使迭代器往回移动一个位置。peekPrevious():返回前一个项目,但不移动迭代器。 QList<QString>list; QMutableListIterator<QString>j(list); list << "a" << "s" << "d" << "f"; QListIterator<QString>i(list); while(i.hasNext()){ qDebug() << i.next(); } while(i.hasPrevious()){ qDebug() << i.previous(); }

STL格式迭代器操作符添加了++,--,*等,模仿数组的使用方式:

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

foreach是Qt添加的关键字,进行容器的顺序遍历,通过预处理使用:

QList<QString>list; list << "a" << "s" << "d"; foreach(QString str, list){ qDebug() << str; }

 

最新回复(0)