高性能c++之标准模版库

本文探讨了如何在C++中使用STL进行性能优化,包括尽量使用指针作为容器元素,考虑对象插入的性能影响,智能指针的开销,减少拷贝次数的技巧,以及善用关联容器如set和map。实验结果显示,针对不同场景,如容器类型、对象大小,选择合适的容器和操作方式对于性能至关重要。
摘要由CSDN通过智能技术生成

这里,我们讨论标准模版库中的各种和性能相关的主题。 需要说明的是文中部分内容源自Efficient C++: Performance Programming Techniques.  


1. 尽量使用指针作为容器元素

    由于对象的拷贝构造函数和析构函数开销很大,而指针的复制和整数的复制几乎没有差别,所以应尽可能的使用指针作为容器元素。 

    什么情况下,不需要使用指针?

    一种是容器元素是较小的基本数据类型,比如int类型。另外一些情况是环境所定,比如接口已经定义好,你无法更改,只能适应。

    某些情况下你需要用到诸如 vector<vector<Type> >之类的容器嵌套,这里可以用 vector<Type>*, 这样的表达式看起来有点古怪,不过它工作的很好。

2. 对象的自然插入性能和插入对象大小对性能的影响。

     这里的比较基于各种容器非特定的插入算法, 比如push_back.     对于有些插入样式,比如push_front,由于容器实现机理不同,有些容器天生的就具有优势,而设计者也考虑到这点,所以不会愚蠢的为vector实现push_front。

     下面是一个插入100万个整数性能测试数据,你可以参考:

                            数组(70ms)< vector(250ms /push_back) < list(930ms /push_back) <multiset(6500ms /insert)

     vector使用reserve的情况下性能提升2-3倍

     真正的问题是: 在容器元素为大对象时࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值