这里,我们讨论标准模版库中的各种和性能相关的主题。 需要说明的是文中部分内容源自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倍

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

被折叠的 条评论
为什么被折叠?



