112-#重磅-容器类(container classes)-【扫盲】
本帖最后由 不二如是 于 2016-10-24 16:46 编辑这次我们要介绍的容器类,天呐!
实在是武林绝学中的大成所在!
不二用尽毕生功力,目前只窥得其中一点奥秘,分享一下~
以求精进!!!{:10_266:}
Qt库提供了一组通用的基于模版的容器类(container classes)。
这些容器类用来存储指定类型的项目(items)。
例如,如果需要一个QString类型的可变大小的数组,那么可以使用QVector(QString)。
在《C++Primer》这本神作中,没错点我,会引领你下载这本神作~⊙▂⊙⊙▂⊙⊙▂⊙
作者Lippman强烈建议大家使用vector类型和迭代器来取代一般的数组,下面就是证据哈~
除非vector无法达到必要的速度要求时,才使用数组!
与STL(Standard Template Library,C++的标准模版库)相比,Qt中的这些容器类更轻量、安全、便捷!
这也是不二推荐大家玩玩儿Qt的原因之一哈~
[*]Qt提供了一些顺序容器:QList、QLinkeList、QVector、QStack、QQueue。
因为这些容器中的数据都是一个接一个线性存储,所以叫顺序容器!
对于大多数应用程序而言,使用是最多滴~
而且最好用的是QList,虽然他是作为一个数组列表,但是他在头部和尾部进行添加操作都是非常迅猛的!
如果需要使用一个链表,那么可以使用QLinkedList
如果希望数据项可以占用连续的内存空间,可以使用QVector
QStacke、QQueue作为便捷类,分别提供了后进先出(LIFO)和先进先出(FIFO)语义。
[*]Qt提供了一些关联容器:QMap、QMultiMap、QHash、QMultiHash、QSet
因为这些容器存储的都是<键,值>对!
比如QMap<Key,T>,所以叫关联容器。
其中’Multi‘容器用来方便支持一个键多个值的情况
好了,接下来让不二来翻译下,置顶的神图~
懂此图,你就懂了99%的容器了
Class Introduction
QList<T> 这是目前最常用的类,他存储了给定类型值的一个列表,这些值都可以通过索引访问。
在内部,QList使用数组来实现,以确保进行快速的基于索引的访问。
可以使用QList::append()和QList::prepend()在列表的两端添加项目。
也可以使用QList::insert()在列表的中间插入项目。
相对于其他容器类,为了拓展到尽可能少的可执行代码,QList被高度优化了。
常用的QStringList继承自QList<QString>
QLinkedList<T> 除了使用迭代器而不使用整数索引引进项目访问外,他基本与QList相同。
当往一个很大的列表的中间插入项目,QLinkedList和QList提供了更好的性能
而且拥有更好地迭代器语义
QVector<T> 他在内存的相邻位置存储给定类型的一个数组。
在vector的前面或者中间插入项目是非常缓慢的,因为这样可能导致了大量的项目要在内存中移动一个位置
QStack<T> 他是QVector的一个便捷子类,提供了后进先出(LIFO)语义。
他添加了push()、pop()、top()函数
QQueue<T> 他是QList的一个便捷子类,提供了先进先出(FIFO)语义。
他添加了enqueue()、dequeue()、head()函数
QSet<T> 他提供了一个快速查询单值的数学集
QMap<Key,T> 他提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。
一般每一个键关联一个单一的值。
QMap使用键顺序来存储他的数据;
如果不关心存储顺序,那么可以使用QHash来代替他,因为QHash更快速。
QMultiMap<Key,T> 他是QMap的一个便捷类,提供了实现多映射的方便接口。
例如一个键可以关联多个值
QHash<Key,T> 他与QMap拥有基本相同的接口,但是他的查找速度更快。
QHash的数据是以任意的顺序存储的
QMultiHash<Key,T> 他是QHash的一个便捷类,提供了多值散列的方便接口
跟STL好相似{:9_240:}
不有区别 前面多了个 Q字{:9_217:} 小人 发表于 2016-10-24 11:12
跟STL好相似
不有区别 前面多了个 Q字
哈哈,是的,轻便、安全多了
小人兄弟别着急哈,还没更新完呢 不二如是 发表于 2016-10-24 11:20
哈哈,是的,轻便、安全多了
小人兄弟别着急哈,还没更新完呢
{:9_233:} 这字 有我一半水准{:9_217:} 小人 发表于 2016-10-24 18:40
这字 有我一半水准
{:9_237:}
页:
[1]