c++ STL 工程实践的15条建议

STL是c++非常重要的一部分,它是很多大神的杰作,高效,稳定,可扩展性好,虽然STL确实存在难以调试,内存碎片的问题(现在机器的内存越来越大,内存碎片的问题基本不太可能成为系统瓶颈,但只要你使用恰当,它能显著提高生产力,并使代码更短,更易维护。

而在工程中,如果不养成好的使用习惯,也容易造成一些问题!

而自己在工程实践中,总结了一些建议

1.  vector, map, set, list, queue, dequeue, stack 等容器存放的对象必须是可拷贝的,尤其注意深拷贝的情况,必须自己重载拷贝构造函数和=号, 最后对象仅仅只有数据成员,且数据成员没有指针。

2. vector, map, set, list, queue, dequeue, stack 等容器存放的对象最好不要是指针,因为多线程环境,对指针操作非常危险,也容易造成内存泄漏的问题,即使存放指针,最好使用智能指针。

3. 定义容器对象,最好在栈空间定义。

4. 尽量不定义全局的容器对象,即使要使用全局的容器,最好使用全局指针,并在某函数内new一个。

5.在栈空间最好定义容器对象,而不是使用容器指针,容器对象可以自动析构。

6.map的key最好是整形或者是string, 最好不要是指针类型;能不自己重载函数对象或者小于号的,就不要去重载,使用默认的。

7.set最好存单一数据类型,整形或者string, 如果是复杂数据,可以使用map替代会更加清晰。

8.判断一个容器是否为空,适应empty()  而不是 size() == 0。

9.vector在预知大致范围时候尽量先reserve, 这样可以在很多时候大大提高程序效率。

10.能用string的尽量不用char数组,除非一些特定需要和性能要求极高的情况。

11.能用STL的sort, partial_sort, 等标准算法的,尽量用STL算法。

12.多线程操作容器时尽量使用容器指针,而不是容器对象,对容器操作对指针加锁。

13.最好使用容器引用作为函数参数,减少拷贝。

14.尽量使用标准STL容器,除非特殊情况使用hash_map等扩展容器。

15.在重载函数对象operator()和<号时,最好内联。

时间: 2024-10-25 22:23:51

c++ STL 工程实践的15条建议的相关文章

优化SpriteKit游戏性能的15条建议

本文翻译自 15 tips to optimize your SpriteKit game SpriteKit是一个简单快速的二维游戏框架,由苹果自己的媒体库支持,可以直接访问GPU. 但是随着游戏的编写,可能会发现帧率开始下降,而且对于iPad Pro这样拥有120Hz刷新率显示屏的设备,需要努力将每一帧更新时间控制在8毫秒之内. 如果遇到帧率低.动画不稳定或类似的性能问题,可以通过一下15个优化方法来识别和解决问题,而且有少量代码示意. 使用纹理图集时要谨慎 纹理地图集将多个单独的资源放置在

从零开始学 iOS 开发的15条建议

事情困难是事实,再困难的事还是要每天努力去做是更大的事实. 因为我是一路自学过来的,并且公认没什么天赋的前提下,进步得不算太慢,所以有很多打算从零开始的朋友会问我,该怎么学iOS开发.跟粉丝群的朋友交流了一下,决定把之前的<18条建议>修改一下,这里统一回答一次. 分三部分: 第一部分:态度和电脑 1.不要关注别人的学习经历,不要关注别人加薪经历. 因为人各不同,别人的经历极有可能并不适合你.而因为每一天的市场状况都不一样,企业的用人需求每天都在变,别人的加薪经历再传奇或惨淡,你都无法复制.别

源码管理的新15条建议

作者:张克强    作者微博:张克强-敏捷307 建议之1:使用好的配置管理工具,也称为版本号控制工具(Version Control), 比方Git,SVN. 请彻底抛弃 VSS.假设是新採用配置管理工具,CVS已经不再是选项. 配置管理工具与版本号控制工具能够理解为指的是同样工具. 建议之2:抛弃古老的配置管理三库做法,常说的三库是指开发库(动态库).受控库和产品库(静态库).做法是开发库->受控库->产品库. 在当年没有强大版本号控制工具的"古代",三库做法是不得不的

源代码管理的新15条建议

总结比较到位 http://blog.csdn.net/zhangmike/article/details/38509483  本文用菊子曰发布

C++编程开发学习的50条建议(转)

每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少.本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真的理解了这些建议,相信能够在学习时准确的抓住侧重点,少走弯路.下面列出这50条建议: 1.把C++当成一门新的语言学习(和C没啥关系!). 2.看<Thinking In C++>,不要看<C++编程思想>. 3.看<The C++ Programming Language>

不走弯路就是捷径学编程语言的30条建议

每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少. 本文就给出了IT学堂http://itlanbao.com/preview.aspx#1,0对C++编程开发学习的30条建议,总结的还 是相当不错的,编程学习者(不仅限于C++学习者)如果真的理解了这些建议, 相信能够在学习时准确的抓住侧重点,少走弯路.下面列出这30条建议: 1.把C++当成一门新的语言学习(和C没啥关系!). 2.看<Thinking In C++>,不要看<C++编程思想>.

Git工程开发实践(六)——Git工程实践扩展

Git工程开发实践(六)--Git工程实践扩展 一.Git提交日志规范 1.Git提交日志模板 Git支持对每次提交的日志信息进行规范,可以通过设置提交模板实现.建立一个gitCommitTemplate文件,内容为: #commit message包含三部分,header, body和footer,其中header必选,body和footer可选. # type(<scope>): <subject> #<body> #<footer> #type字段包含

大师传承-java代码编写的30条建议

成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的.下面就让我们来看看代码编写的30条建议吧. (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母.这样便可标志出它们属于编译期的常数. Java包(Package

学习Java设计模式的10条建议

设计模式在整个Java的学习路线图中扮演着承上启下的作用. 在整个软件生命周期中,唯一不变的就是变化.设计模式就是要在软件设计.编码中对现有问题的一种总结,并从中寻求应对变化的策略. 自己初次接触设计模式有以下几个感觉: 内容很抽象. 示例都能看得懂,但不知道实际中如何应用. 不理解为什么要把“好好的程序”设计成这么复杂? 转眼之间到了需要自己参与需求分析.设计,并且维护之前留下的遗产代码(Legacy Code)的时候了. 再次开始学习设计模式,有了新的收获: 站在变化的角度去看,设计模式虽然