Qt为我们提供了一系列基于模板的容器类,来存储特定类型的项。这些容器类都是隐式共享的;被用作只读容器时,是线程安全的。
与STL类似,也分为序列式容器和关联式容器。
序列式容器有:QVector、QList、QLinkList、QStack、QQueue。对大部分程序来说QList都是一个很好的选择,快速添加操作;如果你想要确保元素占用连续内存,可以用QVector;而QStack和QQueue分别提供了LIFO和FIFO操作。
关联式容器有:QMap、QMultiMap、QHash、QMultiHash、QSet。这些容器存储为Key-Value对,Multi表示支持一个Key关联多个Value;Hash容器通过hash函数而不是二分法查找,提供了更快速的查找操作;
(1)QVector<T>:顺序表,最通用。这个容器类会在一块相邻的内存中存储一个给定类型的值的数组。在一个QVector的前端或中间插入是非常慢的,因为这会导致大量现存的元素移动以为新的元素腾出位置。
(2)QList<T>:链表,最通用。这个容器类维护一个指针数组,指针指向存储的给定类型的值。有两种存储方式:
- 当元素占内存 <= 指针占内存时,且元素使用Q_DECLARE_TYPEINFO声明为Q_MOVABLE_TYPE或Q_PRIMITIVE_TYPE时,那么QList存储方式和QVector一样,都是数组形