【发布时间】:2020-09-02 15:16:33
【问题描述】:
这更像是一个关于 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,这无法帮助我找到它们之间的距离,并且在容器中,最终会指向容器边界之外的东西,这没有帮助或有用。
【问题讨论】:
-
并且,在您看来,该操作的输出应该是什么?即,您希望迭代器加法的输出是什么?
-
和它们不能被乘除的原因完全一样——这样的操作没有有意义的结果。
-
@BrandonManess 减去迭代器与减去指针相同。它是两者之间的元素数。
-
@BrandonManess 请将此信息添加到您的问题中。否则就不清楚你在期待什么。
-
将迭代器视为您家的地址。您正在将您的家庭地址与您朋友的家或隔壁家的地址相加。添加地址没有意义。
标签: c++ iterator operator-overloading stdvector pointer-arithmetic