У меня есть ситуация, когда я иду по вектору, что-то делаю:
std::vector::iterator iter = my_list.begin();
for ( ; iter != my_list.end(); ++iter )
{
if ( iter->doStuff() ) // returns true if successful, false o/w
{
// Keep going...
}
else
{
for ( ; iter != m_list.begin(); --iter ) // ...This won't work...
{
iter->undoStuff();
}
}
}
В нормальных условиях - при условии, что все идет хорошо - я иду до my_list.end()
и успешно завершаю цикл.
Однако, если что-то пойдет не так, пока я делаю что-то, я хочу иметь возможность отменить все - в основном, повторить мои шаги назад к самому началу вектора, отменяя все по одному в обратном порядке.
Моя проблема в том, что когда я добираюсь до my_list.begin()
- как показано во вложенном цикле for - я действительно еще не закончил, потому что мне все еще нужно вызвать undoStuff()
для моего первого элемента в списке. Теперь я мог бы просто сделать последний вызов вне цикла, но это кажется немного нечистым.
То, как я это вижу, я заканчиваю, только когда добираюсь до my_list.rend()
. Однако я не могу сравнить std :: vector :: iterator с std :: vector :: reverse_iterator.
Учитывая то, что я пытаюсь сделать, каков наилучший выбор комбинации итератор-тип / цикл?