c++ - 从 STL 列表中删除项目

标签 c++ stl

我想创建一个函数,如果它们符合特定条件,则将项目从一个 STL 列表移动到另一个。

此代码不是执行此操作的方法。迭代器很可能会被 erase() 函数失效并导致问题:

for(std::list<MyClass>::iterator it = myList.begin(); it != myList.end(); it++)
{
  if(myCondition(*it))
  {
    myOtherList.push_back(*it);
    myList.erase(it);
  }
}

那么任何人都可以提出更好的方法吗?

最佳答案

删除 returns an iterator指向删除后的元素:

std::list<MyClass>::iterator it = myList.begin();
while (it != myList.end())
{
  if(myCondition(*it))
  {
    myOtherList.push_back(*it);
    it = myList.erase(it);
  }
  else
  {
    ++it;
  }
}

关于c++ - 从 STL 列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501962/

相关文章:

c++ - 调用存储在 vector 中的对象的成员函数

c++ - 学习STL的一些问题

c++ - 如何解决由于参数中的默认构造函数导致的函数重载不明确

c++ - std::initializer_list 作为构造函数的模板参数

c++ - 将 vector::iterator 分配给 char 数组后 VS 2003

c++ - 有没有可能让类型具有在容器中抛出的移动操作?

c++ - centos 6 中的 mysql 连接器 cpp undefined reference

c++ - 为双向遍历填充双向链表

c++ - 捕获异常时可以使用 gdb 进行回溯吗?

c++ - 自定义迭代器 : how do I keep track of it?