Effective STL 第2、3、4条
来源:互联网 发布:淘宝大v达人 编辑:程序博客网 时间:2024/05/19 14:55
第2条:不要试图编写独立于容器类型的代码
第3条:确保容器中的对象副本正确而高效
容器中保存了对象,但并不是你提供给容器的那些对象。而当从容器中取出个对象时,你所取出的也并不是容器中所保存的那份。当向容器中加入对象时(通过insert或push_back之类的操作),存入容器的是你所指定的对象的副本。当(通过如front或back之类的操作)从容器中取出一个对象时,你所得到的是容器中所保存的对象的副本。进去的是副本,出来的也是副本(copy in,copy out)。这就是STL的工作方式。
一旦一个对象被保存到容器中,它经常会进一步被复制。当对vector、string或deque进行元素的插入或删除操作时,现有元素的位置通常会被移动(复制)。如果你使用下列任何操作——排序算法,next_permutation或previous_permutation,remove、unique或类似的操作,rotate或reverse等待——那么对象将会被移动(复制)。没错,复制是STL的工作方式。
第4条:调用empty而不是检查size()是否为0
对任一容器c,下面的代码
if(c.size() == 0)…
本质上与
if (c.empty())…
是等价的。既然如此,你或许会疑惑为什么要偏向于某种形式,尤其是考虑到empty通常被时限为内敛函数,并且它所做的仅仅是返回size是否为0。
你应该使用empty形式,理由很简单:empty对所有的标准容器都是常数时间操作,而对一些list实现,size耗费线性时间。
到底是什么使list这么讨厌呢?为什么它不也提供常数时间的size呢?答案在于list所独有的链接(splice)操作。
在这里,就不再对splice操作做具体的解释了,有兴趣者可以阅读Effective STL。
- Effective STL 第2、3、4条
- Effective stl 第6条
- effective stl 第15条
- Effective stl 第一章 第7、8条
- Effective STL 第一章 第9条
- Effective stl 第一章 第10条
- Effective stl 第1章 容器 第5条
- Effective STL 第1条:慎重选择容器类型
- effective stl 第18条: 避免使用vector<bool>
- effective stl 第30条:确保目标区间足够大
- effective stl 第36条:理解copy_if的正确实现
- effective stl 第39条:确保判别式是“纯函数”
- effective stl 第47条:避免产生“直写型”的代码
- Effective STL 第12条:切勿对STL容器的线程安全性有不切实际的依赖
- effective stl 第12条: 切勿对STL容器的线程安全性有不切实际的依赖
- effective stl 第46条:考虑使用函数对象而不是函数作为STL算法的参数
- effective stl 第49条:学会分析与STL相关的编译器诊断信息
- Effective STL 读书笔记——第1条 慎重选择容器类型
- 函数指针的使用样例
- 【Qt5开发及实例】5、布局管理之堆栈窗体QStackedWidget类
- 调试寄存器原理
- Java异常(Exception)小例子&知识点【Java学习笔记】
- 2014-12-21
- Effective STL 第2、3、4条
- 老斜两宗事-七层代理模式还是IP层VPN
- 求十个数中最大值
- 康托展开-nyoj-我排第几个
- 黑马程序员---java基础----网络模型
- 【MAC】Sublime Text 2优化使用
- ASP.net学习总结
- Prim算法(三)之 Java详解
- UVA 591 ---Box of Bricks 模拟枚举