这是一个非常简单的问题。

基本上,说我有两个迭代器,it1it2。给定it1的值,我想定义it2指向一个地址较早的位置。如果我可以一行完成,那就太酷了,例如:

vector<int>::iterator it2 = --it1;

但是,这同时减少了it1,因此我不得不重新增加it1。
vector<int>::iterator it2 = --it1;
++it1;

如果这两行涉及到性能密集型循环,那么我将无缘无故地来回传递许多it1,只是为了定义it2。另一方面,如果我这样做:
vector<int>::iterator it2 = it1;
--it2;

由于它涉及两个步骤,因此它也不是最优的。有没有一种方法可以做到这一点?

最佳答案

您正在寻找 std::prev :

vector<int>::iterator it2 = std::prev(it1);

通常,对于vector的迭代器,指针和随机访问迭代器,还可以使用运算符-:
vector<int>::iterator it2 = it - 1;

10-08 00:33