对于我的节目,我应该阅读一份作业清单和" 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循环中取出并将其添加到正文中,并且如果从向量中移除对象,还会尝试递减计数器。
答案 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()
);