首页 > 代码库 > QT容器类之顺序存储容器(简介)

QT容器类之顺序存储容器(简介)

"""
容器 Containers,有时候也被称为集合 collections,指的是能够在内存中存储其他特
定类型的对象的对象,这种对象一般是通用的模板类。
谓平台无关,即Qt容器类不因编译器的不同而具有不同的实现;所谓“隐式数据共享”,也可以称作“写时复制copy on write”,这种技术允许在容器类中使用传值参数,而不会发生额外的性能损失。Qt容器类提供了类似Java的遍历器语法,同样也提供了类似STL的遍历器语法,
以方便用户选择自己习惯的编码方式。最后一点,在一些嵌入式平台,STL往往是不可用的,这时你就只能使用Qt提供的容器类,除非你想自己创建。
"""
"""
第一个顺序存储容器是QVector<T>,即向量。QVector<T>是一个类似数组的容器,它将数据存储在连续内存区域。
QVector<T>知道它自己的长度,并且可以改变大小。对于获取随机位置的数据,或者是在末尾处添加数据,
QVector<T>的效率都是很高的,但是,在中间位置插入数据或者删除数据,它的效率并不是很高。
"""
"""
Qt 提供了顺序存储容器:QList,Q LinkedList,QVector,QStack 和 QQueue。对于绝
大多数应用程序, QList 是最好的选择。虽然它是基于数组实现的列表,但它提供了快速的
向前添加和向后追加的操作。如果你需要链表,可以使用 QLinkedList。如果你希望所有
元素占用连续地址空间,可以选择 QVector。 QStack 和 QQueue 则是 LIFO 和 FIFO 的
----
Qt 还提供了关联容器: QMap, QMultiMap, QHash , QMultiHash 和 QSet。带有“Multi”
字样的容器支持在一个键上面关联多个值。“Hash”容器提供了基于散列函数的更快的查找,
而非 Hash 容器则是基于二分搜索的有序集合。
另外两个特例:QCache 和 QContiguousCache 提供了在有限缓存空间中的高效 hash 查
找。
"""
"""
QList<t>:最通用的窗口,给定类型t的对象列表形式进行存储,与一个整形的索引关联,在内部使用数组实现,
同时提供了快速访问这些索引,可以使用方法append()和prepend()在列表尾部或者头部添加元素,也可以使用insert()在指定位置插入元素
继承于qlist<qstring>类
"""
"""
qlinkedlist<t>,类似于qlist,除了可以遍历,而不是基于整数索引随机访问,对于在中部插入大量数据,性能高于qlist
同时具有更好的遍历器语义(只要数据存在,它的遍历器会指向合法元素,当插入或者删除数据时,qlist遍历器会指向一个非法值)
"""
"""
qvector 用于在内存中连续区存储一系列给定类型的值,在头部或者中间插入数据可能会非常慢,因为这会引起大量数据在内存中移动
----
qstack<t>是qvector子类,后进先出(lifo)语义,相比qvector,它提供了几个函数:push(),pop(),top()
----
queue<t>是qlist子类,先进先出(fifo)语义,相比qlist,提供了几个函数:enqueue(),dequeue(),head()
qset<t>提供单值数学上面的集合,具有快速查找性能
"""
"""
qmap(key,t)字典数据结构(关联数组),将类型t值同类型key键关联起来,通常每个键与一个值关联,qmap以键顺序存储数据,如果是顺序无关,qhash提供更好性能
----
qmultimap<key,t>是qmap子类,提供多值映射,一个键对象多个值
----
qhash<key,t>与qmap接口几乎相同,但是提供了更快的查找,以字母顺序存储数据
qmultihash<key,t>是qhash子类,提供多值散列
"""
"""
所有的容器都可以嵌套。例如, QMap<QString, Q List<int> >是一个映射,其键是 QString
类型,值是 QList<int>类型,也就是说,每个值都可以存储多个 int。
能够存储在容器中的数据必须是可赋值数据类型。所谓可赋值数据类型,是指具有默认构造
函数、拷贝构造函数和赋值运算符的类型。绝大多数数据类型,包括基本类型,比如 int 和
double,指针,Qt 数据类型,例如 QString、QDate 和 QTime,都是可赋值数据类型。但
是,QObject 及其子类(QWidget、QTimer 等)都不是。也就是说,你不能使用
QList<QWidget>这种容器,因为 QWidget 的拷贝构造函数和赋值运算符不可用。如果你
需要这种类型的容器,只能存储其指针,也就是 QList<QWidget *>
如果要使用 QMap 或者 QHash,作为键的类型必须提供额外的辅助函数。QMap 的键必
须提供 operator<()重载,QHash 的键必须提供 operator==()重载和一个名字是 qHash()
的全局函数。
Qt 容器类可以直接使用 QDataStream 进行存取。此时,容器中所存储的类型必须也能够
使用 QDataStream 进行存储。这意味着,我们需要重载 operator<<()和 operator>>()运算

"""

更多请下载:http://vdisk.weibo.com/s/rtCAtswlNbj