- 5
- 0
- 约1.23万字
- 约 11页
- 2019-01-13 发布于天津
- 举报
有效使用Iterator的三条基本原则-Read
Page PAGE 4 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 rangeEnd);
不同容器
您可能关注的文档
最近下载
- 2026年南阳科技职业学院单招职业适应性考试题库新版.docx VIP
- 超临界流体发泡鞋材行业报告.docx VIP
- 管道开挖安全培训课件.pptx VIP
- 课件2: 铁路建设前期工作---郭宏震--1.ppt VIP
- 2026年南阳科技职业学院单招职业适应性考试题库附答案.docx VIP
- 2012年全国晋升国家级裁判员编排试卷.doc VIP
- 新编秘书实务第二章 秘书接待工作.ppt VIP
- 2025年CPA《审计》基础练习题.docx VIP
- (2026)医务人员手卫生规范PPT课件.pptx VIP
- 11.11 ANSI-ESD STM11.11-2022平面材料的体积电阻测量【自译版本】.pdf
原创力文档

文档评论(0)