1

我需要以向后的顺序迭代一些元素,我正在使用:

for ( /* ... */ it = vec.end() - 1, end = vec.begin() ; it >= end ; --it ) {
    // ...

我现在end() - 1是为一些容器定义的,包括向量,但现在我需要知道是否也定义了开始减量。

编辑

我不知道是否可以使用 reverse_iterator,因为我需要将这些迭代器作为参数传递给 std::vector::erase 并且从文档中看,它们是不同的类型。

4

2 回答 2

15

是的,它是未定义的。

如果要反向迭代元素,只需使用rbeginand rend。它们是反向迭代器,专门为此目的而设计的。如果需要从反向迭代器中获取标准迭代器,可以使用迭代器上的base成员函数

于 2013-08-14T07:32:23.233 回答
4

这是未定义的行为。但是为什么不使用反向迭代器rbegin()rend()呢?

std::vector<int> vec{0,1,2,3,4}
for (auto it = vec.rbegin(); it != vec.rend(); ++it) 
{
  std::cout << *it << " ";
}
std::cout << std::endl;

输出

4 3 2 1 0

于 2013-08-14T07:32:42.607 回答