문제

I need to iterate over some elements in backward order and I'm using:

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

I now that end() - 1 is defined for some containers, including vector, but now I need to know if begin decrement is also defined.

EDIT

I don't know if I could use reverse_iterator, because I'll need to pass these iterators as parameters to std::vector::erase and from the documentation, it looks that they are different types.

도움이 되었습니까?

해결책

Yes, it is undefined.

If you want to iterate over elements in reverse, just use rbegin and rend. They're reverse iterators, designed explicitly for this purpose. If you need to get a standard iterator from the reverse iterator, you can use the base member function on the iterator.

다른 팁

It is undefined behaviour. But why not use reverse iterators rbegin() and 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;

output

4 3 2 1 0

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top