不二如是 发表于 2016-10-24 10:47:29

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的一个便捷类,提供了多值散列的方便接口






小人 发表于 2016-10-24 11:12:54

跟STL好相似{:9_240:}
不有区别 前面多了个 Q字{:9_217:}

不二如是 发表于 2016-10-24 11:20:14

小人 发表于 2016-10-24 11:12
跟STL好相似
不有区别 前面多了个 Q字

哈哈,是的,轻便、安全多了

小人兄弟别着急哈,还没更新完呢

小人 发表于 2016-10-24 18:40:18

不二如是 发表于 2016-10-24 11:20
哈哈,是的,轻便、安全多了

小人兄弟别着急哈,还没更新完呢

{:9_233:} 这字 有我一半水准{:9_217:}

不二如是 发表于 2016-10-24 21:28:39

小人 发表于 2016-10-24 18:40
这字 有我一半水准

{:9_237:}
页: [1]
查看完整版本: 112-#重磅-容器类(container classes)-【扫盲】