2.2 Qt容器类 -- 2017.12.10
Qt提供了一组通用的基于模板的容器类,对比C++的标准模板库中的容器类,Qt的这些容器更轻量、更安全并且更容易使用。此外,
Qt的容器类在速度、内存消耗和内联(inline)代码等方面进行了优化(较少的内联代码将会减少可执行程序的大小)
存储在Qt容器中的数据必须是可赋值的数据类型,也就是说,这种数据类型必须提供一个默认的构造函数(不需要参数的构造函数)、一个复制构造函数和一个赋值操作运算符。
这样的数据类型包含了通常使用的大多数数据类型,包括基本数据类型(如 int和double等)和Qt的一些数据类型(如QString、QDate和QTime等),不过,Qt的Object及其他的子类(如QWidget和Qdialog等)是不能够存储在容器中的,例如:QList<QToolBar>list;
上述代码是无法通过编译的,因为这些类(QObject及其他的子类)没有复制构造函数和赋值操作运算符
一个可代替的方案是存储QObject及其子类的指针,例如:
QList<QToolBar*>list;
Qt的容器类是可以嵌套的,例如:
QHash<QString,QList<double>>
其中,QHash的键类型是QString,它的值类型是QList<double>。注意,在最后两个“>”符号之间要保留一个空格,否则,C++编译
器会将两个“>”符号解释为一个“>>”符号,导致无法通过编译器编译。
Qt的容器类为遍历其中的内容提供了以下两种方法:
(1)Java风格的迭代器(Java-style iterators)
(2)STL风格的迭代器(STL-style iterators),能够同Qt和STL的通用算法一起使用,并且在效率上也略胜一筹。
- - - - - - - - - - 害你加班的bug,就是我写的! - - - - - - - - - -
周末美好时光,静静地做个mei男子.............