c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?

标签 c++ vector loops iterator for-loop

我有一种情况,我正在通过一个 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::iteratorstd::vector::reverse_iterator 进行比较。

鉴于我正在尝试做的事情,迭代器类型/循环组合的最佳选择是什么?

最佳答案

我对 STL vector 有点生疏,但是否可以从初始迭代器创建 std::vector::reverse_iterator?然后你只需要从你在前进时所在的最后一个项目开始,并且能够将它与 my_list.rend() 进行比较以确保第一个项目被处理。

关于c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/632805/

相关文章:

python - 在 Python 中创建一个 "actual"for 循环?

c - 进入无限循环的简单 C 代码。为什么?

c++ - 如何求和两个或三个大数?

c++ - std::unique_ptr 和 reset() 或您的类的 Reset 方法?

c++ - 重载新建和删除

c++ - 在 C++ 中的 main() 之前初始化 vector

c++ - 在循环条件下调用 const-vector size() 似乎缺少优化

c++ - C++11 的编译器标志 - 找不到计时文件

c - 来自给定数组的位 vector 实现

c++ - 在 C++ 中按字母顺序排列列表中的所有单词