- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Effective STL.doc
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的三个独立条款。你可以在找到英文原文。
关于Scott的前两本C++专著:Effective C++和More Effective C++,可以参见侯捷先生的书评:掷地铿锵的三本OOP小书。
有效使用STL迭代器的三条基本原则
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转换成const_iterator或者reverse_iterator,也可以隐式的将reverse_iterator转换成const_reverse_iterator。并且,reverse_iterator可以通过调用其base()成员函数转换为iterator。const_reverse_iterator也可以类似的通过base()转换成为const_iterator。然而,一个图中无法显示的事实是:通过base()得到的也许并非你所期待的iterator,我们将会在原则三中详细讨论这一点。
很显然,我们没有办法从一个const_iterator转换得到一个iterator,也无法从const_reverse_iterator得到reverse_iterator。这一点非常重要,因为这意味着当你仅仅得到一个const_iterator或者const_reverse_iterator,你会在调用容器类的一些成员函数时遇到麻烦。这些成员函数要求iterator作为参数,而你无法从const类型的迭代器中直接得到iterator。当需要指出插入或者删除的位置时,const类型的迭代器总是显得那么力不从心。
千万不要傻乎乎的宣称const
您可能关注的文档
- BF——2010——2712 合同编号:.doc
- Book 2 Unit 12 课后练习一.doc
- BUG或相关问题具体内容提交.doc
- By 我是大李 发表于 2006-3-28 205318 .doc
- C++字符串完全指南 第一部分:Win32字符编码.doc
- C2线 青岛 威海 蓬莱 烟台 一高一飞五日游.doc
- CAJ、KDH、NH文件怎样转换成WORD格式.doc
- CALIS联合目录中文三级编目员资格认证.doc
- CAROLINE合作意向调查表.doc
- CA证书相关说明:.doc
- 300516_2024_#ESG_久之洋_2024年环境、社会及公司治理(ESG)报告_2025-03-28.pdf
- 301508_2024_#ESG_中机认检_中机寰宇认证检验股份有限公司2024年度环境、社会和公司治理(ESG)报告_2025-04-21.pdf
- 300693_2024_#ESG_盛弘股份_2024年环境、社会、公司治理(ESG)报告_2025-04-03.pdf
- 300339_2024_#ESG_润和软件_2024年度环境、社会和公司治理(ESG)报告_2025-04-22.pdf
- 300376_2024_#ESG#SD_ST易事特_2024年度可持续发展暨ESG报告_2025-04-29.pdf
- 300834_2024_#ESG_星辉环材_2024年度环境、社会及治理(ESG)报告_2025-04-29.pdf
- 301115_2024_#ESG_联检科技_2024年度环境、社会和治理(ESG)报告_2025-04-29.pdf
- 300308_2024_#ESG_中际旭创_2024年环境、社会及公司治理(ESG)报告_2025-04-21.pdf
- 想生科技产品注册公告及所需文件상생기술제품_등록_공고문_및_제출_서류.pdf
- 300760_2024_#SD_迈瑞医疗_2024年度可持续发展报告_2025-04-29.pdf
最近下载
- 测力环系数自动计算EXCEL.docx VIP
- 统编版小学语文一年级上册第八单元 观察 大单元整体学历案教案 教学设计附作业设计(基于新课标教学评一致性).docx VIP
- 监理投标服务承诺书.docx VIP
- 金融风险管理-王金安-第5章 流动性风险管理.pptx VIP
- 赵一曼革命英雄人物故事课件课件(图文演讲)(1).pptx VIP
- 标准建设工程施工合同示范文本(2024版).docx VIP
- 公司数据管理制度.docx VIP
- 选择性必修1教材分析与教学建议 课件-2023-2024学年高中历史统编版(201.pdf VIP
- 改进的最小二乘法计算固结系数.pdf VIP
- 农机液压系统检修知到智慧树期末考试答案题库2024年秋黑龙江农业工程职业学院(南岗校区).docx VIP
文档评论(0)