当前位置:  开发笔记 > 编程语言 > 正文

使用迭代器走路和解散std :: vector最干净的方法是什么?

如何解决《使用迭代器走路和解散std::vector最干净的方法是什么?》经验,为你挑选了1个好方法。

我有一种情况,我正在通过矢量,行事:

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进行比较.

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



1> Andy..:

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

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有