性能特性测试系列1——STL容器,QT容器性能相关比较和总结

这篇博客对比了QT和STL容器的性能,包括顺序容器、关联容器和容器适配器。测试结果显示,QT和STL容器在性能上差异不大,但在某些特定操作上,如插入和删除,QT的QVector和QList表现出色。QList在插入和查找上的性能优于std::list。对于关联容器,std::unordered_map在查找上比QHash更快。在选择容器时,应根据具体需求来决定使用QT还是STL。
摘要由CSDN通过智能技术生成

 闲话就不多扯了,本次测试了qt容器,和stl容器相关的效率,增加自己的理解,毕竟耳听为虚,眼见为实,书和资料怎么说都只是一个理论,直接测试性能才是王道。

流程

qt,stl容器对应关系对比->横向比较每个对应关系容器效率->纵向比较各自容器效率->总结表格。

测试环境:Qt5.7,vs2015。

序、qt,stl容器对应关系对比图

 下面这张图片是转载的,正好看到了。该图将qt、stl的顺序容器,和关联容器的对应关系,分别罗列出来了,一目了然,在此引用下。但是缺少容器适配器,所以我在下方自己做了个表,加入的容器适配器。
本图片转载自 点击跳转
这里写图片描述
 从上图能够清楚看到一一对应的关系,所以就不多解释了,下方是自己做的一个表格,主要是补充容器适配器对应关系:
这里写图片描述
 本表格参考来源(cppAPI官网):点击跳转
 从代码里我们也能清楚的看到stl的容器适配器的原型:
这里写图片描述
 至此,基本的容器对应关系已经明了,开始比较各容器间的性能。

顺序容器

一、 std::vector与QVector:

理论
 vector的内部存储结构为线性表。在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,所以对于随机访问的速度很快(按下标),但是对于插入尤其是在头部,中间插入元素速度很慢,在尾部插入速度很快。 并且要vector 达到最优的性能,最好在创建vector 时就指定其空间大小。
特点:随机访问快,插入慢,查找快,尾部增加快。
对比理论:
 这两者效率理论上是差不多的,且可以相互转换。QVector的insert是用下标索引,std::vector的insert是用迭代器索引。但实测中QVector一样有迭代器索引方式,并且用这两种方式效率上没有区别。
各自测试:
 1、 std::vector: 插入和删除中,从头部和中间insert插入耗时是从尾部插入的十倍,而pushback比insert要高效率很多,erase同样要比pop方式慢上千倍不止,所以除非特殊情况,一般用push和pop。
 2、 QVector:同上。
这里写图片描述
 在release版本下,QVector和std::vector在尾部位置insert插入,查找上,较之std::vector稍好一点, push上没有太大区别,但是erase,popback删除上要比std::vector慢上一些;
总结:
对于vector,选择push和pop来增删都是让效率更高的方式,而在选择QVector和std::vector上没有太大的区别,但考虑到pop耗时,一般情况下std::vector更好。
 QVector≈std::vector

二、 std::List与QLinkedList与 QList:

理论:
 1、std::list和QlinkedList内部结构为双向链表(每一个节点都包括一个信息块&#

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值