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

标签 c++ iterator operator-overloading stdvector pointer-arithmetic

这更像是一个关于 C++ 的好奇问题,是在学习如何查找迭代器引用的索引后提出的。
给定两个 vector 迭代器,为什么它们可以相减但不能相加?
例如,为什么要编译和运行:

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,这不能帮助我找到它们之间的距离,并且在容器中最终会指向容器边界之外的东西,这没有帮助或有用。

最佳答案

迭代器以指针为模型。
给定指针 P1P2 , 表达式 P2 - P1为您提供指针之间的偏移/距离。您无法从表达式 P1 + P2 中期待任何明智的选择。 .
将这个想法扩展到迭代器,你就会明白为什么两个迭代器之间的减法有意义而加法没有意义。

关于c++ - 为什么不能将两个 std::vector 迭代器相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63708530/

相关文章:

c++ - 按位操作,获得更大值(value)

c++ - 通过指针比较

c++ - 如何正确使用enable_if?

c++ - STL 映射与 vector 的迭代器访问性能?

c++ - C++ 中的 vector 迭代器

c++ - 使用 operator[] 和 operator=

c++ - 如何从类外部设置成员变量并在 C++ 中使用类内部的变量?

C++访问 vector 中的对元素

c++ - operator++ 的正确返回类型

c++ - 重载 new 和 delete C++ 以跟踪内存分配