这是一个关于C++的好奇问题,涉及到如何通过迭代器查找索引。
给定两个向量迭代器,为什么它们可以相减而不能相加?
例如,为什么这段代码可以编译和运行:
std::vector<int> vect;
vect.begin() - vect.end();
虽然这并不:
std::vector<int> vect;
vect.begin() + vect.end();
问题是更好地理解迭代器的行为方式。对于那些进行评论和回答的人,谢谢你们!我需要更深入地了解指针算术以理解这一点。
我认为最有帮助的答案是迭代器就像指针。
减去两个指针以获取它们之间距离的差异是有意义的,就像在数字线上看1-10并想要7到3之间的距离一样,您可以将3从7中减去得到4的距离。
添加7和3得到10,并不能帮助我找到它们之间的距离,在容器中会指向超出容器边界的内容,这既不方便也没有作用。
(x + y) / 2
是可处理的。遗憾的是,它需要写成x + (y - x) / 2
,这不够清晰,并且依赖于第二项是一个区间。 - Bathsheba