我有一种情况,我正在通过一个 vector 行进,做一些事情:
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()
并成功结束循环。
但是,如果我在做某事时出现问题,我希望能够撤消所有内容 - 基本上将我的步骤回溯到 vector 的开头,一次以相反的顺序撤消所有内容。
我的问题是,当我到达 my_list.begin()
- 如嵌套 for 循环所示 - 我真的还没有完成,因为我仍然需要调用 undoStuff( )
在列表中的第一个元素上。现在,我可以在循环之外进行最终调用,但这似乎有点不干净。
在我看来,我只有在到达 my_list.rend()
时才完成。但是,我无法将 std::vector::iterator
与 std::vector::reverse_iterator
进行比较。
鉴于我正在尝试做的事情,迭代器类型/循环组合的最佳选择是什么?
最佳答案
我对 STL vector 有点生疏,但是否可以从初始迭代器创建 std::vector::reverse_iterator
?然后你只需要从你在前进时所在的最后一个项目开始,并且能够将它与 my_list.rend()
进行比较以确保第一个项目被处理。
关于c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632805/