effective stl 笔记 2010.2.2

来源:互联网 发布:为什么淘宝网登录不了, 编辑:程序博客网 时间:2024/04/30 11:57

最近在学习图算法,书中大量使用到了vector作来管理线性存储结构,感觉比数组要方便很多,所以想好好学习一下C++的容器类。但是光看msdn又感觉不是很系统,在effective C++最后正好看到了effective stl这本书,于是下来准备学习学习。

    下面把目前的收获总结一下。首先,stl又很多的成员,不同的成员在操作上,iterator的使用上和效率上都有很大的不同,而且互有优劣,这就使得要编写一个通用的stl变得不太可能。于是,在使用stl的时候要充分的考虑到各方面的需求,选择最适合的stl。第二,要防止将derived class对象赋值给base class template的stl,因为这会发生截断,要用base class的指针或引用类型代替。第三,在检测stl是否为空的时候要用empty()代替size(),因为empty()拥有常数的时间复杂度,而size()的时间复杂副可能是线性的。另外,要用range member function 来代替single-element 操作来对stl进行操作,这部分作者分析的十分细致,从程序的易于理解程度,可复用能力,节省函数调用次数,重复使用single-element操作对于stl数据进行的频繁修改和stl中的数据超出其容纳数量是要进行的空间再分配(这里涉及到新空间的申请,数据的复制和旧空间的删除)等多个方面对于使用range member的好处做了剖析,这让我不禁感叹作者思维的缜密。拥有range member版本的操作有range ssignment操作,range insert操作,range onstruct操作和range erase操作,在遇到这些操作的时候要使用range member function 来代替冗长的循环。

     感觉这本书的整体性比effective c++要强很多,不像后者各部分可以相对脱离,只有一部分知识的交叉。但是作者在这方面处理的很好,继续把它看完吧。