将vector <T> :: iterator与vector <T> :: reverse_iterator进行比较

Mar*_*tin 20 c++ iterator stl vector

我正在进行一个练习,我有一个向量,我正在编写自己的反向算法,使用反向和正常(向前)迭代器来反转向量的内容.但是,我无法比较迭代器.

int vals[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
vector<int> numbers(vals, vals + 10);

vector<int>::iterator       start = numbers.begin();
vector<int>::reverse_iterator end = numbers.rend();
Run Code Online (Sandbox Code Playgroud)

我有一个先前的算法,通过使用两个迭代器来反转向量,但是在这个任务中,我无法使用它们之间的!=运算符来比较它们.我的猜测是在向量中获取基础指针或索引,但我如何得到指针/索引?

wil*_*ilx 15

使用返回的迭代器进行比较base():it == rit.base() - 1.

  • 但要小心.如果`rit`是一个结束迭代器(即反向迭代的结束),则`rit.base()`是`numbers.begin()`,它是从它中减去1的UB.另一种方法是比较`distance(numbers.begin(),it)== distance(rit,numbers.rend()) - 1`. (2认同)

Reu*_*nen 5

你可以转换reverse_iteratoriterator通过调用base().

但要小心,因为有一些警告.@Matthieu M.的评论特别有帮助:

注:base()实际上返回iterator的元素之后,该元素reverse_iterator是指向.

  • 注意:`base()`实际上将`iterator`返回到*reverse_iterator指向的元素之后的元素*. (5认同)