Qt的容器类

1. 注意点:

1)基于模板的容器类;

2)存储在容器中的数据必须是可赋值的数据类型。

  即必须提供默认构造函数,拷贝构造函数和赋值操作。

 

2. 常见容器类:
1)QList<T>:维护了一个指针数组,可基于下标快速访问,对不同类型的数据会采取不同的存储策略;

  继承自 QList 的子类有 QItemSelection,QQueue,QSignalSpy,QStringList 和 QTestEventList 。

2)QLinkedList<T>:链式列表,不能下标,只能迭代; 

  继承自 QLinkedList 的子类有 QPolygon,QPolygonF 和 QStack 。

3)QVector<T>:连续存储,既能下标,也能迭代。

 

3. 如何遍历容器类?

1)JAVA风格的迭代器:迭代点位于表前,表后,或两项之间。

  只读:QListIterator<T>;读写:QMutableListIterator<T>

  ......

  ep:

 1 #include <QDebug>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     QList <int> list;
 6     QMutableListIterator <int> it(list);
 7 
 8     for (int i = 0; i < 10; i++) {
 9         it.insert(i);
10     }
11 
12     for (it.toFront(); it.hasNext();)
13         qDebug()<<it.next();
14 
15     qDebug()<<'\n';
16 
17     for (it.toBack(); it.hasPrevious();) {
18         if (0 == it.previous() % 2)
19             it.remove();
20         else
21             it.setValue(it.peekNext() * 10);
22     }
23 
24     for (it.toFront(); it.hasNext();)
25         qDebug()<<it.next();
26 }

 

2)STL风格的迭代器:迭代点直接指向列表项,API 基于指针,可 ++ 或 * 操作。

  只读:QList<T>::connst_iterator;读写:QList<T>::iterator。

  ......

  ep:

 1 #include <QDebug>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     QList <int> list;
 6     for (int i = 0; i < 10; i++)
 7         list<<i;
 8 
 9     QList<int>::iterator it;
10     for (it = list.begin(); it != list.end(); ++it) {
11         qDebug()<<(*it);
12         *it *= 10;
13     }
14 
15     qDebug()<<'\n';
16 
17     QList<int>::const_iterator cit;
18     for (cit = list.begin(); cit != list.end(); ++cit) {
19         qDebug()<<(*cit);
20     }
21 }

 

4. QMap 和 QHash

 

上一篇:buuctf初学者学习记录--[护网杯 2018]easy_tornado


下一篇:MySQL 8.0 单机基础版支持1核CPU 1GiB内存规格