Cha*_*l72 6 c++ iterator c++11
C++ InputIterator是Iterator概念中最受限制的类型之一.它只能保证支持解除引用,相等比较,预增量和后增量(以及后增量和取消引用)
因为InputIterator对象经常迭代任意流,所以您甚至无法确定在同一输入上迭代两次将产生相同的值.
但是,我很困惑,如果取消引用运算符,operator *每次取消引用时都保证返回相同的值,前提是你永远不会增加迭代器.
例如,假设std::begin(some_input_stream)返回满足InputIterator概念要求的对象,并且it不等于或超过结束位置:
auto it = std::begin(some_input_stream);
auto value1 = *it;
auto value2 = *it;
assert(value1 == value2);
Run Code Online (Sandbox Code Playgroud)
为value1保证是相同的值value2?(当然,提供任何类型的*it产生都实现了理智的平等比较语义)
为
value1保证是相同的值value2?
是.事实上,你也可以复制的迭代器,以及拷贝是保证给予同样的结果,直到你递增迭代器之一:
auto it2 = it;
auto value3 = *it2;
assert(value3 == value1);
++it2;
auto value4 = *it; // ERROR: might not be dereferencable any more
Run Code Online (Sandbox Code Playgroud)
这由*aC++ 11表107(输入迭代器要求)中的要求指定:
如果
a == b和(a,b)是在域==则*a相当于*b.
之后++r:
之前的任何值的副本
r都不再需要可解除引用或属于其中==.
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |