【发布时间】:2011-01-19 06:52:59
【问题描述】:
什么是 C++ 中的迭代器?
【问题讨论】:
什么是 C++ 中的迭代器?
【问题讨论】:
从 p. 80 个Accelerated C++:
迭代器是一个值
- 标识容器和容器中的元素
- 让我们检查存储在该元素中的值
- 提供在容器中的元素之间移动的操作
- 以与容器可以有效处理的方式相对应的方式限制可用操作
【讨论】:
虽然最初看起来相当明显,但实际上这是一个比您可能意识到的更深层次的问题。与 Paul McJones 一起,Alexander Stepanov(原著的设计者,任何不知道的人)最近出版了一本名为 Elements of Programming(又名 EOP)的书。那本书的第六章全部专门讨论迭代器,本书其余部分也与迭代器密切相关。任何真正想详细了解迭代器的人都可以考虑阅读这本书。
警告:EOP 不适合胆小的人。它相对较短(约 260 页),但相当密集。从经验来看,早期的发展有点令人不安。我对第一章的最初反应或多或少是“好吧,这太明显了,几乎不值得一读。毕竟我是在上周之前开始编程的!”
幸运的是,我确实看过练习,并尝试做一些练习——尽管我认为主题很明显,但练习需要严格的证明。这有点像被要求证明(在数学意义上)水是湿的。你最终只需要读几遍这一章,就可以摆脱你已经知道答案的先入为主的观念,这样你就可以看到真正的问题——“湿”的真正含义是什么? “湿”的基本特征是什么?
【讨论】:
迭代器是一种遍历对象集合的方式。通常,它们允许您以类似于使用指针访问经典 C 数组的方式顺序访问 STL(标准模板库)容器。要通过迭代器访问对象,您可以像 C 指针一样取消引用它。要访问集合中的下一个对象,请使用增量 (++) 运算符。一些容器有多种迭代器,允许您以不同的方式遍历集合。
【讨论】:
它们是序列中位置的表示。就其本身而言,它们只不过是好奇心,但当被取消引用时,它们会在它所代表的位置产生包含在序列中的值。
【讨论】:
http://en.wikipedia.org/wiki/Iterator
可以让您逐个遍历数组中的所有内容。
在 c++ 中,我认为您在谈论“for_each”......据我所知,C++ 实际上并没有“foreach”,这与 C# 等语言不同。但是,标准模板库有它。
【讨论】: