C++ 我正在尝试使用向量迭代器创建for循环

C++ 我正在尝试使用向量迭代器创建for循环,c++,for-loop,vector,iterator,C++,For Loop,Vector,Iterator,对于我的程序,我应该读取一个任务列表,并从列表中“删除”不好的任务,然后将新的任务列表写入一个输出文件。这一切都正常工作,除了我的剪枝函数出于某种原因是按2计数并跳过向量中的偶数。现在我了解了如何使用.erase()将列表移动一次,并将计数器上移一次,但还没有找到解决方法 void Prune() { for (std::vector<Assignment>::iterator i = m_Assignments.begin(); i != m_Assignments.end

对于我的程序,我应该读取一个任务列表,并从列表中“删除”不好的任务,然后将新的任务列表写入一个输出文件。这一切都正常工作,除了我的剪枝函数出于某种原因是按2计数并跳过向量中的偶数。现在我了解了如何使用.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++;
        }

    }
}
void Prune()
{
for(std::vector::iterator i=m_Assignments.begin();i!=m_Assignments.end())
{
如果(!i->IsGood())
{
i=m_赋值。擦除(i);
--一,;
}
其他的
{
i++;
}
}
}

到目前为止,我已经尝试将计数器从for循环中取出,并将其添加到体中,还尝试在对象从向量中移除时减少计数器。

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

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

您的
for()
似乎缺少一个
那就是。
--i看起来有点奇怪。因为
i=m_赋值。擦除(i)
将在删除元素后将
i
设置为该元素,
--i
将导致程序重新扫描上一个元素,这可能是您想要的,也可能不是您想要的,但是想一想如果你只是擦除第一个元素会发生什么。好吧,我发现这不是我的代码,而是代码块和批处理文件,我用的是lol