Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7565272
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2013-12-20 11:31:52


存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式。

Qt 提供了另外一套基于模板的容器类。相比 STL,这些容器类通常更轻量、更安全、更容易使用。

Qt 的容器类提供了隐式数据共享、不可变的特性,并且为速度做了优化,具有较低的内存占用量等。另外一点比较重要的,它们是线程安全的。这些容器类是平台无关的,即不因编译器的不同而具有不同的实现;隐式数据共享,有时也被称作“写时复制(copy on write)”,这种技术允许在容器类中使用传值参数,但却不会出现额外的性能损失。

Qt 提供了顺序存储容器:QListQLinkedListQVectorQStackQQueue。对于绝大多数应用程序,QList是最好的选择。虽然它是基于数组实现的列表,但它提供了快速的向前添加和向后追加的操作。如果你需要链表,可以使用QLinkedList。如果你希望所有元素占用连续地址空间,可以选择QVectorQStackQQueue则是 LIFO 和 FIFO 的。

Qt 还提供了关联容器:QMapQMultiMapQHashQMultiHashQSet。带有“Multi”字样的容器支持在一个键上面关联多个值。“Hash”容器提供了基于散列函数的更快的查找,而非 Hash 容器则是基于二分搜索的有序集合。

另外两个特例:QCacheQContiguousCache提供了在有限缓存空间中的高效 hash 查找。

我们将 Qt 提供的各个容器类总结如下:

QList:这是至今为止提供的最通用的容器类。它将给定的类型 的对象以列表的形式进行存储,与一个整型的索引关联。QList在内部使用数组实现,同时提供基于索引的快速访问。我们可以使用 QList::append()QList::prepend()在列表尾部或头部添加元素,也可以使用QList::insert()在中间插入。相比其它容器类,QList专门为这种修改操作作了优化QStringList继承自QList

QLinkedList:类似于 QList,除了它是使用遍历器进行遍历,而不是基于整数索引的随机访问。对于在中部插入大量数据,它的性能要优于QList

QVector:用于在内存的连续区存储一系列给定类型的值。在头部或中间插入数据可能会非常慢,因为这会引起大量数据在内存中的移动。

QStack:这是QVector的子类,提供了后进先出(LIFO

QQueue:这是QList的子类,提供了先进先出(FIFO

QSet:提供单值的数学上面的集合,具有快速的查找性能。

QMap:提供了字典数据结构(关联数组),将类型 的值同类型 Key 的键关联起来。通常,每个键与一个值关联。QMap以键的顺序存储数据;如果顺序无关,QHash提供了更好的性能。

QMultiMap:这是QMap的子类,提供了多值映射:一个键可以与多个值关联。

QHash:该类同QMap的接口几乎相同,但是提供了更快的查找。QHash以字母顺序存储数据

QMultiHash:这是QHash的子类,提供了多值散列。

 
返回目录:Qt学习整理

阅读(5053) | 评论(0) | 转发(0) |
0

上一篇:Qt 文件操作

下一篇:Qt容器遍历

给主人留下些什么吧!~~