【发布时间】:2010-10-12 13:55:13
【问题描述】:
我有一种情况,我正在通过向量行进,正在做一些事情:
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() 时才完成。但是,我无法将 std::vector::iterator 与 std::vector::reverse_iterator 进行比较。
鉴于我正在尝试做的事情,迭代器类型/循环组合的最佳选择是什么?
【问题讨论】:
标签: c++ vector loops iterator for-loop