为什么两个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+
迭代器以指针为模型。
给定指针 P1
和 P2
,表达式 P2 - P1
给出指针之间的 offset/distance。表达式 P1 + P2
没有任何意义。
将这个想法扩展到迭代器,你就会明白为什么两个迭代器之间的减法有意义,而加法却没有意义。
这是学习如何查找迭代器引用的索引后出现的关于 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+
迭代器以指针为模型。
给定指针 P1
和 P2
,表达式 P2 - P1
给出指针之间的 offset/distance。表达式 P1 + P2
没有任何意义。
将这个想法扩展到迭代器,你就会明白为什么两个迭代器之间的减法有意义,而加法却没有意义。