我有一种情况,我正在通过矢量,行事:
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进行比较.
鉴于我正在尝试做什么,迭代器类型/循环组合的最佳选择是什么?
当谈到STL向量时,我有点生疏,但是可以std::vector::reverse_iterator
从你的初始迭代器创建一个吗?然后你只需要从前进的最后一个项目开始,并且能够将它与之比较my_list.rend()
以确保处理第一个项目.