指向上一个值而不递减指针

Par*_*dox 3 c++ pointers

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

基本上,假设我有两个迭代器,it1并且it2.给定值it1,我想定义it2为更早地指向一个地址.如果我可以在一行中完成它会很酷,例如:

vector<int>::iterator it2 = --it1;
Run Code Online (Sandbox Code Playgroud)

但是,这会同时减少它1,所以我必须重新增加它1.

vector<int>::iterator it2 = --it1;
++it1;
Run Code Online (Sandbox Code Playgroud)

如果这两行涉及性能密集型循环,我会有很多it1来回无缘无故,只是为了定义it2.另一方面,如果我这样做:

vector<int>::iterator it2 = it1;
--it2;
Run Code Online (Sandbox Code Playgroud)

这也略微不理想,因为它涉及两个步骤.有没有办法一个一个?

krz*_*zaq 10

您正在寻找std::prev:

vector<int>::iterator it2 = std::prev(it1);
Run Code Online (Sandbox Code Playgroud)

对于vector的迭代器,指针和随机访问迭代器一般来说,你也可以使用运算符-:

vector<int>::iterator it2 = it - 1;
Run Code Online (Sandbox Code Playgroud)