是std :: vector :: begin() - 1未定义?

vin*_*ker 0 c++ portability iterator stl

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

for ( /* ... */ it = vec.end() - 1, end = vec.begin() ; it >= end ; --it ) {
    // ...
Run Code Online (Sandbox Code Playgroud)

我现在end() - 1已经定义了一些容器,包括vector,但现在我需要知道是否还定义了开始递减.

编辑

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

Nic*_*las 14

是的,它是未定义的.

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