effective stl学习笔记

effective stl学习笔记

ID:12387454

大小:101.00 KB

页数:23页

时间:2018-07-16

effective stl学习笔记_第1页
effective stl学习笔记_第2页
effective stl学习笔记_第3页
effective stl学习笔记_第4页
effective stl学习笔记_第5页
资源描述:

《effective stl学习笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、EffectiveSTL学习笔记1.vector避免使用,因为vector不是容器替换方法:使用deque或者bitset来替换注:bitset不可以动态进行添加元素或者删除2.容器中不能包含智能指针auto_ptr,考虑使用boost中的shared_ptr来替换3.容器中的元素如果为指针,请自行进行删除指针,如vector,因为指针不能被析构掉4.如果需要判断容器是否为空,请使用容器的empty方法来判断,而不是size()方法,因为list型的容器是O(n)的时间复杂度,而emp

2、ty方法是O(1)时间复杂度5.map中的key类型,需要重载operator<和operator==方法原型为booloperator<(constT&t)const{},booloperator==(constT&t)const{}注:T请替换为该key的类型,并非是泛型T6.C++11以前STLlist中的size方法是O(n)的,当list特别大的时候,需要注意这个问题6.在使用数组或者链表,只需要遍历的时候,元素较少使用vector,较多请使用list7.背景:在string或者vector中,可能因为实现上的原因,每次在

3、申请内存的时候,是申请了2的整数次方的内存试想这样一种场景,string或者vector因为元素的增加,而使得内存增大,但是后来因为一些原因想要删除部分元素,使得string和vector申请了一大部分的内存,但是却存了很少的数据,这时想要收缩内存到合适的空间,怎么做呢?方法:vectorv;vector(v).swap(v);strings;string(s).swap(s);含义:就是申请一个临时的vector或者string,然后交换空间,这样可以使得string或者vector以合适的内存大小保存现有的数据注:该

4、方法适用于vector或者string中占了大量内存,而存放较少数据的场景,否则拷贝数据将要花费大量时间9.如果你的map中的元素,不需要被排序,那么考虑使用hashmap或者tr1中的unordered_map,这样整体插入及查询删除效率都会有很大的提升据说google的开源的sparse_hashmap效率比unordered_map更高,你知道你的map用过了之后效率多低了吗?10.vector,list,deque的容器选择问题背景:vector是堆上的连续数组,list是双向链表,deque是多个连续内存块1)vector

5、的最佳选择是知道容器中元素个数,然后调用reserve方法,push_back效率是三者最高的,且这样不涉及到的内存的复制及重新分配问题2)需要频繁的在任意位置插入和删除,选择list,毫无疑问3)只是在容器的头部和尾部做插入和删除,那么尽量选择deque,否则选择vector11.对于insert和erase对于容器的操作,必须假设都会使所有迭代器失效12.容器中的区别:map中有operator[],multimap没有list和deque都有push_front方法,vector没有list的remove方法可以真正的删除这个

6、节点,其他任何容器不行algorithm:list不能使用nth_element方法13.STL容器通过insert或者push_back方法插入容器的都是原来对象的拷贝,基础数据类型也是对象的话,拷贝的时候使用拷贝构造加入到容器中,因此如果拷贝对象代价特别大,请考虑不要将对象加入到容器中,只把对象的指针加入到容器即可(推荐使用智能指针shared_ptr)14.大大的坑:classAclassB:publicAvector.push_back(inst_B),结果只会push_backinst_B中的A实例部分,B到A的派生

7、出来的部分会被剔除解决方案是使用容器vector来保存B对象的指针即可,但是注意请自行析构vector,参考3vector>比较推荐15.尽量使用区间函数代替单元素方法:区间构造:container::container(InputIteratorbegin/*区间起点*/,InputIteratorend/*区间终点*/)区间插入:/*序列容器:string,vector,deque,list*/voidcontainter::insert(iteratorposition,InputI

8、teratorbegin/*区间起点*/,InputIteratorend/*区间终点*/)/*关联容器:set,map,multiset,multimap*/voidcontainer::insert(lnputIteratorbe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。