栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】Effective STL:50条有效使用STL的经验:三十至三十二

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】Effective STL:50条有效使用STL的经验:三十至三十二

第三十条:确保目标区间足够大
对于vector、string、deque、list容器在尾部插入对象时,需要使用back_inserter函数;
其中deque和list容器还可以使用front_inserter在头部插入对象。
为了提供插入操作的性能,对于vector和string容器可以使用reserve来提前分配好内存。

第三十一条:了解各种与排序有关的选择
按照性能由高到底排序:
1、partition:把满足特定条件的元素放到前面;
2、stable_partition:把满足特定条件的元素放到前面,并且是稳定的排序(在遇到相等的对象时,还会按照出场顺序排序);
3、nth_element:找出部分最优的对象,可以不按照顺序,比如列出前十个,而且这十个可以不用排序;
4、partial_sort:部分排序;
5、sort:全部排序
6、stable_sort:稳定版本的全部排序,不仅全部排好序,而且在遇到相等的对象时,还会按照出场顺序排序。
注意:list::sort是稳定排序。

第三十二条:如果确实需要删除元素,则需要在remove这一类算法之后调用erase
注意:remove不能删除容器中元素。
因为从容器中删除元素的唯一方法是调用该容器的成员函数,而remove并不知道它操作的元素所在的容器,所以remove不可能从容器中输出删除元素。
remove实际功能:把不用被删除的元素放到容器前部,把需要被删除的元素放到容器尾部。
如果需要真正删除元素,需要使用erase和remove配合

vector v;
...
v.erase(remove(v.begin(), v.end(), 99), v.end());

同理unique也需要和erase配合使用。

注意:list::remove会真正删除元素,并且比使用erase-remove配合使用更高效,list::unique也会真正删除元素。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号