繁体   English   中英

我正在尝试使用矢量迭代器创建一个for循环

[英]I am trying to create a for loop with vector iterators

对于我的程序,我们应该读取一个分配列表,然后从列表中“修剪”不良的分配,并将新的分配列表写入输出文件。 除了我的Prune函数出于某种原因要以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++;
        }

    }
}

到目前为止,我已经尝试过将计数器从for循环中取出并将其添加到主体中,并且如果从矢量中删除了对象,还尝试减小计数器。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM