阅读工作草案N3337-1,编程语言C++标准,24.2.5转发迭代器,第806页.
来自草案:
两个可解除引用的迭代器a和b类型X提供了多次通过保证,如果:
- a == bimplies ++a == ++b和
- X是指针类型或表达式(void)++X(a), *a等价于表达式*a.
[注意:a == b暗示的要求++a == ++b(对于输入和输出迭代器不是这样)以及通过可变迭代器(适用于输出迭代器)去除对赋值数量的限制允许使用多遍 -具有前向迭代器的定向算法. - 尾注]
有人可以用更简单的术语重新解读这个吗?我知道Forward迭代器是多遍的,但我不明白这是如何根据C++标准要求完成的.
Die*_*ühl 15
这些术语说明了一切,我想:你可以多次通过序列并记住序列中的位置.只要序列没有改变,从特定位置(迭代器)开始,您将按照相同的顺序遍历相同的对象.但是,你只能前进,没有办法向后移动.像这样的序列的规范示例是单链表.
引用的子句基本上说,如果你有两个迭代器比较相等,你递增它们中的每一个,你得到相同的位置,他们再次比较相等:
if (it1 == it2) {
++it1;
++it2;
assert(it1 == it2); // has to hold for multi-pass sequences
}
Run Code Online (Sandbox Code Playgroud)
有些奇怪的表达式++X(a), *a基本上是为了使迭代器独立于a,++X(a), *a并且等效的要求*a基本上意味着使用独立迭代器对序列进行迭代并不会改变a引用的内容.这与输入迭代器不同,其中输入迭代器++InIt(a), *a不一定等同于*a第一个表达式可以改变位置,可能使其a所指的值无效和/或改变它.
相比之下,单程序列(标准术语中的输入和输出迭代)只能遍历一次:尝试多次遍历序列将无法正常工作.这样的序列的规范示例是从键盘输入并输出到控制台:一旦读取,您将无法再次返回相同的字符,一旦发送,您无法撤消字符.
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |