Qt | 关于容器类的一些总结

举报
黑兔子 发表于 2022/08/02 14:39:56 2022/08/02
【摘要】 Qt中关于容器类的一些总结。

前言:
之前面试被问过一个问题,关于数据结构的:
问题:“你知道的数据结构有哪些?它们在实际程序中有哪些应用?”
答案: 数据结构分为线性结构和非线性结构,按照存储方式线性结构又分为顺序结构和链式结构,程序中常见的线性结构包括:数组、队列、链表、栈等。程序中常见的非线性结构包括二维数组、多维数组、树、图等。

容器的分类:
顺序容器:
QList、 QLinkedList、QVector、QStack和QQueue。因为这些容器中的数据都是一个接一个线性存储的,所以成为顺序容器。

QList: 是目前最常用的容器类。它存储了给定类型的值的一个列表,这些值可以通过索引访问。在QList的内部是通过使用数组实现的,以确保进行快速的基于索引访问。它的一些方法:QList::append()–在列表的尾部添加项目;QList::prepend()–在列表的头部添加项目;QList::insert()–在列表的中间插入项目。常用的QStringList就继承自QList<QString>。

QLinkedList: 它和QList基本相同,区别在于:QLinkedList使用迭代器访问项目,而QList一般使用整数索引访问项目;在向一个很大的列表中间插入项目时,QLinckedList比QList拥有更好的性能。(注意: 当迭代器指向QLinckedList的一个项目后,只要这个项目还存在,那么迭代器就依然有效;而当迭代器指向QList中的一个项目后,如果QList进行了插入或者删除操作,这个迭代器就无效了。)

QVector: 占用连续的内存控件存储给定类型的值的一个数组。在vector的前面或者中间插入项目是非常缓慢的,因为这样可能导致大量的项目在内存中移动一个位置。

QStack: 它是QVector的一个便捷子类,提供了后进先出语义。添加了push()、pop()、和top() 等函数。

QQueue: 它是QList的一个便捷子类,提供了先进先出语义。添加了enqueue()、dequeue() 和head() 等函数。

关联容器:
QMap、QMultiMap、QHash、QMultiHash和QSet。因为这些容器存储的是<键、值>对,比如QMap<Key, T>,所以被称为关联容器。

QMap: 它提供了一个字典(关联数组),将Key类型的键值映射到值上。一般一个键关联单一的一个值。QMap使用键顺序来存储它的数据(自动根据键的顺序进行排序);如果不关心存储顺序,还可以使用QHash来代替它,因为QHash速度更快。

QMultiMap: 它是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以关联多个值。

QHash: 它与QMap拥有基本相同的接口,但是它的查找速度更快。QHash的数据是以任意的顺序存储的。

QMultiHash: 它是QHash的一个便捷类,提供了实现多值散列的接口函数。

QSet: 它提供了一个可以快速查询单值的数学集。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。