在下面的代码中,我尝试计算两个迭代器之间的距离。迭代器从相同的位置开始,我将 1 前进 3 次,所以我觉得它们之间的距离应该是 3,但我总是得到 0。为什么?
using namespace std;
stringstream strstream{"Hello world"};
auto b = istream_iterator<char>{strstream};
auto e = istream_iterator<char>{strstream};
++e;
++e;
++e;
cout << "distance: " << distance(b,e) << endl;
Run Code Online (Sandbox Code Playgroud)
Nat*_*ica 11
这是因为输入迭代器仅保证单次传递。以下内容来自cppreference关于operator++输入迭代器的内容:
++r[...]
后置条件:r 先前值的任何副本不再需要可取消引用或位于 == 的域中。
因此,之后++e,b不再对其价值或是否可用提供任何保证。
根据cppreference:
如果两个 [istream] 迭代器都是流尾迭代器或者它们都引用相同的流,则它们相等。
因为您的两个流迭代器引用同一个流,所以它们是 equal 的。你进步其中之一并不重要。
由于它们是相等的,因此它们之间存在0距离。
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |