- 6
- 0
- 约1.6万字
- 约 15页
- 2017-03-18 发布于重庆
- 举报
Effective_STL阅读笔记
《Effective STL》读书笔记
Item 1:Choose your containers with care
小心选择容器
a 主要容器包括:
1. 标准STL顺序容器:vector, list, deque, string
2. 标准STL关联容器:set, multiset, map, multimap
3. 其他:slist, rope, hash_set, hash_map, array, stack等。
b 简单的顺序容器选择规则:默认使用vector,当需要频繁在中间插入和删除元素时使用list,当插入和删除主要在容器两端执行时使用deque。
c 容器可分为两类:内存连续型(Contiguous-memory containers)和基于节点型(Node-based containers)。
Item 2:Beware the illusion of container-independent code.
当心容器无关代码的假象
a 容器无关代码是不现实的。
b 通过封装,可以使改变容器时对相关代码的修改变得方便。最简单的方式是用typedef定义容器和迭代器类型。
下面的代码:
class Widget ... ;vector vw;Widget bestWidget;vector ::iterator i find vw.begin , vw.end , bestWidget ;
为了方便在容器改变时修改相关代码,可以考虑封装成这样的方式:
class Widget ... ;
typedef vector WidgetContainer;
typedef WidgetContainer::iterator WCIterator;
WidgetContainer vw;
Widget bestWidget;
WCIterator i find vw.begin , vw.end , bestWidget ;
c typedef只能提供词法上的帮助。当需要更进一步的封装时,应该使用类。
为了减少变化容器时的代码修改,将容器封装在类中,将容器相关的信息暴露在类的接口中。
例如:
class CustomerList private: typedef list CustomerContainer; typedef CustomerContainer::iterator CCIterator; CustomerContainer customers;??public: ... // limit the amount of list-specific?information visible through?this interface ;
Item3:让容器中对象高效和正确地复制
Make copying cheap and correct for objects in containers.
STL容器中常常会执行对象的复制操作。复制操作由对象的复制构造函数和复制操作符完成。
在存在继承的情况下,复制可能会导致slicing:如将一个子类push到一个父类的容器中。
使得复制高效、正确且避免slicing的一种方法是:使用对象(智能)指针的容器。
对比array,vector可以根据需求来增长空间,且能通过reserve方法在不复制对象的条件下分配足够的空间
Item4:使用empty 而不是检查size
Call empty instead of checking size against zero.
对标准容器而已,empty 的时间开销总是常数级的,但是某些情况下list的实现中size 的时间开销是线性级的。
对list的实现而言,必须在size 和splice 之间折中,不可能两者都是常数级的时间开销。
Item 5:区间成员函数优先于与之对应的单元素成员函数
Prefer range member functions to their single-element?counterparts
将vector v1的内容替换为vector v2的后半部分时,最好使用:v1.assign v2.begin + v2.size /2, v2.end 若不使用区间成员函数,则需要写一个像这样的循环:
vector v1, v2;?v1.clear ;for vector ::const_iterator ci v2.begin + v2.size / 2; ci ! v2.end ; ++ci v1.push_back *ci ;
或者使用copy:
copy v2.begin + v2.size
您可能关注的文档
- XXX二期监控点位设计.doc
- XXX公司船舶保险建议书.doc
- EDAS-24IP用户指南.doc
- XXX医院(早产儿)视网膜脱离复位术知情同意书.doc
- EDA实验七人表决器.doc
- EDA实验七段译码显示.doc
- XXX发电企业漏电保护器管理标准.doc
- EDA实验连接图.doc
- EDA建立封装库.doc
- EDA技术PSpice软件常用PSpice元件符号.doc
- 中航期货-铜月报-2026年2月.pdf
- 欧洲央行-资本缓冲能力的结构模型.pdf
- 国金证券-计算机行业专题研究报告-消费电子3D打印迎加速契机.pdf
- 民航局机场司现行有效文件目录.pdf
- 华西证券-钠电池行业专题报告-技术成熟+应用领域清晰,钠电池有望迎来放量.pdf
- 华鑫证券-传媒行业周报-传媒回调行情仍在,智能新纪元撬动注意力经济.pdf
- 国金证券-石油化工行业研究-美以对伊朗军事行动爆发.pdf
- 西部证券-建筑建材行业周报-中国化学重点推荐关注减碳技术服务商.pdf
- 欧洲电力行业联盟-Eurelectric对ENTSO-E 2025年欧洲资源充足性评估咨询的回应(英).pdf
- 欧洲银行体系中的风险传播:非银行金融机构和市场风险的放大效应-2026.pdf
最近下载
- 社会情感学习(SEL)PPT模.pptx VIP
- 新改版教科版六年级下册科学知识点.doc VIP
- 西门子PLCs7-300教程课件.ppt VIP
- 教学实录之七下语文第6课《老山界》.docx
- 太阳能热水系统计算过程.pdf VIP
- 《设计思维方法与表达》教学课件2 (3).pptx VIP
- 中华人民共和国环境保护法亮点解读.ppt VIP
- 电力建设施工质量问题(通病)图集(火电分册).docx
- 党员2025年度组织生活会“(对照贯彻党的创新理论方面,对照加强党性锤炼方面,对照联系服务群众方面,对照发挥先锋模范作用方面,对照改作风树新风方面)五个对照”对照检查材料.docx VIP
- sel儿童社会情感课件.pptx VIP
原创力文档

文档评论(0)