我是 C++ 新手,正在尝试了解迭代器。到目前为止,我已经了解到迭代器就像指针一样,可用于遍历线性数据结构的元素。但我很难理解迭代器的数学运算。我已经了解了递增/递减运算符,或者迭代器和数字之间的操作。对于迭代器
it
:
it++
或 it+1
表示迭代器将指向下一个元素。it--
或 it-1
表示迭代器将指向前一个元素。但是我很难理解两个迭代器之间的数学运算。例如,在此代码中:
vector<int> preorder {1, 2, 4, 5, 7, 8, 3, 6, 9};
vector<int> inorder {4, 2, 7, 5, 8, 1, 3, 9, 6};
auto mid = find(inorder.begin(), inorder.end(), preorder[0]) - inorder.begin();
我知道
find(inorder.begin(), inorder.end(), preorder[0])
会返回一个指向1
中元素inorder
的迭代器,但是我不知道从中减去inorder.begin()
之后的结果会是什么,也不知道为什么要减去它?
请帮助我理解两个迭代器之间的数学运算是如何工作的。谢谢:)
我尝试在 Google 上搜索两个迭代器之间执行数学运算的结果是什么,但遗憾的是我找不到任何可信的答案。
inorder.begin()
指向向量的第一个元素。
find(inorder.begin(), inorder.end(), preorder[0])
将为您提供找到的项目的迭代器,如果未找到项目,则为 end
。
因此,如果我们从找到的迭代器中减去起始迭代器,那么我们就可以得到需要增加
begin
多少次才能到达返回的迭代器(距离)。 这为您提供了向量中元素的位置/索引。 如果返回结束迭代器,则该位置将与向量的大小相同,并且 vector[size]
是无效位置。
std::vector
迭代器是随机访问迭代器。给定同一个容器中的 2 个随机访问迭代器,您可以从后一个迭代器中减去前一个迭代器来获取它们之间的元素数量。
在您的示例中,代码使用此特征来计算找到的迭代器引用的元素的index。