c++ - 我正在尝试使用 vector 迭代器创建一个 for 循环

标签 c++ for-loop vector iterator

对于我的程序,我们应该读取一个作业列表,然后从列表中“删除”错误的作业,并将新的作业列表写入输出文件。这一切都正常工作,除了我的 Prune 函数出于某种原因是双数计数并跳过 vector 中的偶数。现在我了解使用 .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 循环中取出并将其添加到正文中,并且还尝试在对象从 vector 中移除时递减计数器。

最佳答案

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

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

关于c++ - 我正在尝试使用 vector 迭代器创建一个 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490087/

相关文章:

loops - 对于循环数学测验生成器,循环不重复

python - 如何跳过python for循环中的索引

javascript - 二维数组 For 循环语法的困难

r - 计算向量中的连续数字

c++ - 错误: glibc detected when using vector

c++ - 我正在尝试学习如何正确分离类头和代码

c++ - openMPI 数据类型可移植性

c++ - 将数组匹配分配给字符串

c++ - 为什么 cin.clear() 会修复由 cin 错误输入引起的无限循环?

c++ - std::vector 的 Typedef 和 ostream 运算符