【发布时间】:2018-07-07 11:44:12
【问题描述】:
对于我的程序,我应该读取一个作业列表并从列表中“删除”错误的作业,并将新的作业列表写入输出文件。除了我的 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 循环中取出并将其添加到主体中,并且还尝试在对象从向量中移除时递减计数器。
【问题讨论】:
-
您的
for()似乎缺少; -
那是remove_if。
-
--i;看起来有点奇怪。由于i = m_Assignments.erase(i);会将i设置为删除元素之后的元素,--i将导致程序重新扫描前一个元素,这可能是也可能不是你想要的,但想想如果你只是@987654329 会发生什么@d 第一个元素。 -
好吧,我发现这不是我的代码,而是代码块和我使用的批处理文件,哈哈
标签: c++ for-loop vector iterator