我有一种情况,我正在穿过一个向量,做一些事情:
std::vector<T>::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()
。但是,我无法将 astd::vector::iterator
与 a进行比较std::vector::reverse_iterator
。
鉴于我正在尝试做的事情,迭代器类型/循环组合的最佳选择是什么?