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。


0 0
原创粉丝点击