我遇到了一个情况,我正在遍历一个向量并进行一些操作:
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()
(如嵌套循环中所示)时,我还没有完成,因为我仍然需要调用列表中第一个元素上的 undoStuff()
。现在,我可以在循环外面进行最后一次调用,但这似乎有点不干净。在我看来,只有当我到达
my_list.rend()
时才算完成。然而,我不能将 std::vector::iterator
与 std::vector::reverse_iterator
进行比较。鉴于我所要做的事情,哪种迭代器类型/循环组合是最好的选择?