Qt容器使用

本文介绍了Qt中的几种容器:QList、QVector、QLinkedList、QStack、QQueue等,强调了QList作为首选容器的原因,如快速访问和便利的接口。还对比了字典容器QMap和QHash,以及QSet的特点。内容涵盖了容器的时间复杂度和适用场景,对于存储自定义类型值推荐使用QVector,其他情况推荐QList。
摘要由CSDN通过智能技术生成

Qt容器使用

1.值容器
 QList:编写Qt程序时优先考虑使用此容器,支持下标快速访问, QList的实现比较特殊, 内部存储的是一段连续的数组指针,
 当存储的类型小于指针大小(如char),或者是指针或者是Qt的隐式共享类(Implicit Sharing)时,那么QList会直接存储这些类型.
 数据量在1000以内,QList任何地方插入都非常快,因为QList已经提前在前面和后面分配了内存. 但当存储
 的类型大小大于指针大小且不隐式共享时, 每次的插入都要从堆中分配内存,还不如QVector内存分配机制
 QVector:在连续空间内分配空间, 支持下标快速访问.根据存储的数据个数内存重新分配时会分配多余空间.
 QLinkedList:Qt中真正的链表, 只能使用迭代器访问
 QStack:继承QVector, 具有栈的特性
 QQueue:继承QList, 具有队列的特性
 
 Qt优先使用QList除了存储访问有优势外, 另一个重要原因是它提供了几个很方便的接口
 int removeAll(const T &value) //删除所有value值
 bool removeOne(const T &value) // 删除遇到的第一个value值
 void removeAt(int i ) //删除指定下标值
 T takeAt(int)  // 删除指定下标值并返回该值
 T value(int i) const // 返回第i下标值, 如果i超出有效范围,返回此类型的默认值
 T value(int i , const T &defaultvalue) // 返回第i下标值, 如果i超出有效范围,返回defaultvalue值
 
 综合上述, 当要存储自定义类型值(大小大于指针大小且没有隐式共享)时使用QVector, 否则使用QList

2.字典容器
 QMap 使用键值对, 键值按顺序排列, 键值需要提供<. 如果在乎键排序使用此容器.QMultiMap可存储多键值
 QHash使用键值对, 查找速度快, 键值任意排列,键值需要提供=. 只在乎查找速度使用此容器,QMultiHash可存储多个键值.
 QSet 存储单一值, 查找速度快, 排列任意.

3.各容器时间复杂度

 

QLinkedList<T>

O(n)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值