容器Containers
Qt 提供了顺序存储容器:QList,QLinkedList,QVector,QStack和QQueue。对于绝大多数应用程序,QList是最好的选择。虽然它是基于数组实现的列表,但它提供了快速的向前添加和向后追加的操作。如果你需要链表,可以使用QLinkedList。如果你希望所有元素占用连续地址空间,可以选择QVector。QStack和QQueue则是 LIFO 和 FIFO 的。
Qt 还提供了关联容器:QMap,QMultiMap,QHash,QMultiHash和QSet。带有“Multi”字样的容器支持在一个键上面关联多个值。“Hash”容器提供了基于散列函数的更快的查找,而非 Hash 容器则是基于二分搜索的有序集合。
另外两个特例:QCache和QContiguousCache提供了在有限缓存空间中的高效 hash 查找。
Qt 容器类可以直接使用QDataStream进行存取。此时,容器中所存储的类型必须也能够使用QDataStream进行存储。这意味着,我们需要重载operator<<()和operator>>()运算符:
QString分配数据:
QString每次分配 4 个字符,直到达到 20。
在 20 到 4084 期间,每次分配大约一倍。准确地说,每次会分配下一个 2 的幂减 12。(某些内存分配器在分配 2 的幂数时会有非常差的性能,因为他们会占用某些字节做预订)
自 4084 起,每次多分配 2048 个字符(4096 字节)。这是有特定意义的,因为现代操作系统在重新分配一个缓存时,不会复制整个数据;物理内存页只是简单地被重新排序,只有第一页和最后一页的数据会被复制。
4,8,12,16,20,52,116,244,500,1012,2036,4084,6132,8180,10228,12276,14324,16372。