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()和<号时,最好内联。

c++ STL 工程实践的15条建议相关推荐

  1. 15条建议,把技术成果写成一篇高质量学术论文

    作者:汪晟    达摩院数据库与存储实验室 引言 随着技术的不断沉淀,研发团队对通过发表学术论文向业界分享研究成果的诉求也愈发强烈.但对许多研发团队而言,论文撰写的相关问题较难把握,例如:如何评估已取 ...

  2. 并发编程的 15 条建议(译)

    内核专家 Bryan Cantrill 和 Jeff Bonwick 在 2008 年 9 月的<ACM Queue>上发表了<Real-world Concurrency> ...

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

    事情困难是事实,再困难的事还是要每天努力去做是更大的事实. 因为我是一路自学过来的,并且公认没什么天赋的前提下,进步得不算太慢,所以有很多打算从零开始的朋友会问我,该怎么学iOS开发.跟粉丝群的朋友交 ...

  4. 并发编程的15 条建议

    内核专家 Bryan Cantrill 和 Jeff Bonwick 在 2008 年 9 月的<ACM Queue>上发表了<Real-world Concurrency> ...

  5. 源代码管理的新15条建议

    作者:张克强    作者微博:张克强-敏捷307 建议之1:使用好的配置管理工具,也称为版本控制工具(Version Control), 比如Git,SVN. 请彻底抛弃 VSS,如果是新采用配置管理 ...

  6. 5G工程实践(15%)

    大唐杯的模拟题都会考原题 网络规划原理 无线网络规划整体流程-----规模估算-----机房设备及配套设备的规划原理 个人感觉勘察工作就和土木建房一样,大致流程就是选址,设计图纸,施工,测试 电信项目 ...

  7. 【干货】选择外贸邮件群发软件,外贸邮件营销软件,邮件群发代发软件15条建议!

    直接干货上 邮件硬件层面: 1. 邮件群发服务器必需在海外 理由:在海外的服务器丢件少.延迟少.到达率高 2.邮件发信IP必需优质,有专门测试工具,可以测试发信IP信誉值(可以联系EmailCamel ...

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

    事情困难是事实,再困难的事还是要每天努力去做是更大的事实. 分三部分: 第一部分:态度和电脑 1、不要关注别人的学习经历,不要关注别人加薪经历. 因为人各不同,别人的经历极有可能并不适合你.而因为每一 ...

  9. 给一时兴起想要学Python的同学的15条建议

    大家应该都有感受,近几年编程真的很火!网上到处都是9块9零基础成为编程大神,朋友圈Python广告下面乌泱泱的全是评论,连少儿都开始学编程,代码都从娃娃抓起... 有的网上课程甚至只要0.99元! 有 ...

最新文章

  1. 你知道数据中心宕机的真正成本吗?
  2. 压缩软件系统设计测试结果,空气压缩机测试系统软件设计与研究
  3. devc++调试下一步没反应_某化工厂污水处理站SBR工艺调试方案
  4. 解决浏览器存储问题,不得不了解的cookie,localStorage和sessionStorage
  5. IBM并购网络视频会议商WebDialogs 加入Lotus Sametime
  6. 我也谈谈代码的性能测试及代码改进
  7. Python库:wordcloud库介绍、政府工作报告词云、自定义背景词云
  8. 《例说8051:单片机程序设计案例教程》——第 2 章 输出口的应用
  9. JAVA POI读取Excel中Cell为null的处理
  10. 【解决方案】钉钉直播课堂挂机被点到名字怎么办
  11. 2021年第十届“认证杯“数学中国数学建模国际赛(小美赛
  12. Hive读时模式和写时模式的区别是什么?
  13. 贝尔曼方程详尽推导(无跳步|带图)
  14. 个人总结感想系列 - 2014年总结
  15. java编写爬虫_Java怎么写网络爬虫?分分钟带你爬取,源码
  16. atoi()函数用法
  17. PhotoZoom Classic 7怎么样?对电脑和系统要求高不高?
  18. jsp java 传值方法_JSP页面间的传值方法总结
  19. discuz插件 inc.php,discuz的插件是怎么操作数据库的?
  20. 水果网上销售平台_新闻和完美的推销平台

热门文章

  1. Iptalbes自动封杀暴力破解(Qmail邮件系统)者的IP地址
  2. “.公司”域名注册总量TOP15:新网问鼎 万网居亚
  3. 3C趋势价值对云计算发展的驱动作用
  4. WCF简单教程(6) 单向与双向通讯
  5. 支持向量机-SVM-最优化公式推导记录
  6. Oracle的列转行问题
  7. 一个待办事列表todolist
  8. C语言信息系统贴吧,急 c语言学生信息管理系统
  9. 【机器学习】梯度下降原理
  10. jQuery中的on 和事件委派