200110有效运用STL-侯捷.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档