为什么两个std::vector迭代器不能相加?

Why can two std::vector iterators not be summed?

这是学习如何查找迭代器引用的索引后出现的关于 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,这不能帮助我找到它们之间的距离,而且在容器中,最终会指向容器边界之外的东西,这没有帮助或用处。

因为做那个操作意义不大,所以iterator

中没有定义operator+

迭代器以指针为模型。

给定指针 P1P2,表达式 P2 - P1 给出指针之间的 offset/distance。表达式 P1 + P2 没有任何意义。 将这个想法扩展到迭代器,你就会明白为什么两个迭代器之间的减法有意义,而加法却没有意义。