- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
200110有效运用STL-侯捷.doc
Page PAGE 11 of NUMPAGES 11
Effective STL
不需要看Amazon上的读者打分,也不需要去找C++专家们的书评。单是似曾相识的封面,似曾相识的书名,还有似曾相识的作者,就足以证明它不会让你失望了。
这是Scott Meyers的第三本C++专著,在以其特有的简练而敏锐的笔锋揭示了如何有效使用C++语言本身的种种规则之后,Scott将注意力转移到了C++标准库中的STL部分。
Effective STL的各章节不同程度的涉及STL的六大构成要件。千万不要误以为这是一本STL使用手册或者初学者指南,与这一系列的前两本一脉相承,Effective STL同样是为具备一定STL使用经验的程序员准备的。
提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。使用STL可以使你的代码更为优雅且易于维护,可以让你彻底的从C语言风格中解脱出来。然而,STL秉承了C++的设计风格:高效甚至正确性仍然依赖于程序员的正确抉择。如何正确使用STL(尤其是当性能问题至关重要的时候),对广大C++程序员来说仍是一种挑战。
也许你的C++代码已经充斥着vector、string甚至multimap,也许你正在为此而自鸣得意,然而,你是否真的了解STL呢?你知道如何在各种容器类之间做出正确的选择吗?你知道如何最为有效的从一个vector中删除特定值的元素吗?你知道关联容器中“等值”与“等价”的区别吗?先别急着回答,Scott会让你后悔的,我保证。
有些书是每个C++程序员都必须拥有的,Effective STL正是其中的一本。
—— Thomas Becker, C/C++ Users Journal专栏作家
以下文章(有效使用STL迭代器的三条基本原则)是C/C++ Users Journal摘录的Effective STL的三个独立条款。你可以在 HYPERLINK / 找到英文原文。
关于Scott的前两本C++专著:Effective C++和More Effective C++,可以参见侯捷先生的书评:HYPERLINK /expert/jjhou/article00-7.htm掷地铿锵的三本OOP小书。
有效使用STL迭代器的三条基本原则
译注:原文中将iterator、const_iterator、reverse_iterator和const_reverse_iterator合称为iterator。考虑到可能存在的歧义,译文中使用中文“迭代器”泛指四种类型,而特定的类型名称保持英文原文。
STL迭代器的概念看上去似乎已经足够直观了,然而,你会很快发现容器类(Container)实际上提供了四种不同的迭代器类型:iterator、const_iterator、reverse_iterator和const_reverse_iterator。进而,你会注意到容器类的insert和erase方法仅接受这四种类型中的一种作为参数。问题来了:为什么需要四种不同的迭代器呢?它们之间存在何种联系?它们是否可以相互转换?是否可以在STL算法(Algorithm)和其他工具函数中混合使用不同类型的迭代器? 这些迭代器与相应的容器类及其方法之间又是什么关系?
这篇从新近出版的《Effective STL》中摘录的文章将会通过迭代器使用的三条基本原则来回答上述问题,它们能够帮助你更为有效的使用STL迭代器。
原则一:尽量使用iterator取代const_iterator、reverse_iterator和const_reverse_iterator
STL中的所有标准容器类都提供四种不同的迭代器类型。对于容器类containerT而言,iterator的功用相当于T*,而const_iterator则相当于const T*(可能你也见到过T const *这样的写法,它们具有相同的语义[2])。累加一个iterator或者const_iterator可以由首至尾的遍历一个容器内的所有元素。reverse_iterator与const_reverse_iterator同样分别对应于T*和const T*,所不同的是,累加reverse_iterator或者const_reverse_iterator所产生的是由容器的尾端开始的反向遍历。
让我们先来看一下vectorT容器insert和erase方法的样式:
iterator insert(iterator position, const T x);
iterator erase(iterator position);
iterator erase(iterator rangeBegin, iterator rangeE
您可能关注的文档
最近下载
- 物业保安军训标准--队列.doc
- 广东省中小学教育创新成果奖评奖申请表及申报说明.doc
- 环境影响评价报告公示:年产4亿平方米锂电池专用湿法隔膜和改性涂覆隔膜项目环评报告.doc VIP
- 兵器工业集团第十一届职业技能竞赛数控铣工理论试题库资料-下(多选、判断题汇总).pdf VIP
- 徐州工程学院2010届毕业生生源信息一览表.xls VIP
- 秃鸡散_千金卷二十_方剂加减变化汇总.doc
- 市政道路施工与质量验收规范.pdf
- 医院护理品管圈成果汇提高糖尿病住院患者口服降糖药的正确率完整版本PPT易修改.pptx
- 工程已完工补签施工合同模板.docx VIP
- 2024年新版员工安全生产应知应会手册.pptx
文档评论(0)