这更像是一个关于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,这无助于我找到它们之间的距离,而且在容器中,最终会指向容器边界之外的东西,这既没有帮助也没有用处。
迭代程序是以指针为模型的。
给定指针P1
和P2
,表达式P2 - P1
给出指针之间的偏移量/距离。从表达式P1 + P2
中没有什么可期待的。将这个想法扩展到迭代器中,您就会理解为什么两个迭代器之间的减法是有意义的,而加法则没有意义。
因为执行该操作没有多大意义,因此在iterator
中没有定义operator+