我试图用矢量迭代器创建一个for循环

时间:2018-01-28 18:49:05

标签: c++ for-loop vector iterator

对于我的节目,我应该阅读一份作业清单和" Prune"列表中的错误分配,并将新的分配列表写入输出文件。这一切都正常工作,除了我的修剪函数由于某种原因计数两个并跳过向量中的偶数。现在我明白使用.erase()将列表移动一个并将计数器向上移动一个但是还没有找到解决方法。

void Prune()
{
    for (std::vector<Assignment>::iterator i = m_Assignments.begin(); i != m_Assignments.end())
    {
        if (!i->IsGood())
        {
           i = m_Assignments.erase(i);
           --i;
        }
        else
        {
            i++;
        }

    }
}

到目前为止,我已经尝试将计数器从for循环中取出并将其添加到正文中,并且如果从向量中移除对象,还会尝试递减计数器。

1 个答案:

答案 0 :(得分:1)

我相信你可以通过一个名为std::remove_if的有用函数来处理循环和迭代器,从而解决所有这些问题。这会将您的代码缩短为以下内容:

m_Assignments.erase(
    std::remove_if(m_Assignments.begin(), m_Assignments.end(), 
                   [](const Assignment& x) 
                   { 
                       return !x.IsGood(); 
                   })
    , m_Assignments.end()
);