QVector

4 篇文章 0 订阅

QList 和QVector的区别

QList不同于List,QList 是基于数组+链表,即各个节点的 指针不是通过Next来指向,而是通过将各节点的指针存放在一个数组中,遍历通过找到数组中的指向该节点的指针,在通过指针将节点找到,所以QList的效率应该是同QVector差不多,只是多了一个通过指针查找节点的过程。

QVector同vector一样是一段连续的内存。

QVector 的优缺点

QVector针对不改变的对象,即只要求查询,不做插入删除等操作效率高,但是由于自身结构的原因,插入删除甚至包括追加等操作的效率会比QLIst低,
例如:
当执行插入操作时,如果是插入在中间,那么从插入位置之后的元素都会被影响,如果是插在第一个位置,那么所有的元素都会受影响,即所有元素都会后移,之前的迭代器都将失效,删除同理,至于追加,则是可能会效率低,原因在于,当QVector开始是申请的一段内存正好已经用完,此时进行添加的话,系统会重新分配一块更大的内存,并将现有的元素拷贝到新的内存中,这样效率自然就低了。

QList的优缺点

对比,QVector,QList的优点就很显而易见了,分散存储,并且查找效率也不会低。
针对网上说的,QList可能会造成堆栈溢出导致崩溃,实际测了一下,

  QList<int> m_num;
        int i = 0;

        for(; ; i++)
        {
            try
            {
                m_num<<5020;
            }
            catch(...)
            {
                qDebug()<<"00000000000000000";
                qDebug()<<i*8/1024/1024;
                break;
            }
        }
        //m_num.clear();
        qDebug()<<i;
        --------------
        结果:

Qt 推荐,如果不是明确要求使用连续的内存空间,请选择QList而非QVector.
先写到这。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值