如何删除C ++中列表中的某些元素

时间:2017-10-30 13:52:40

标签: c++ list stl

我想删除列表中的一些元素,在下面的实现中,我想删除7,14,26,77。最后打印17,89,45,50。但它似乎有些不对(这个程序运行成功,但什么都不打印),有人可以帮助我吗?

// remove from list
#include <iostream>
#include <list>
using namespace std;
int main ()
{
  int myints[]= {17,89,7,14,26,77,45,50};
  std::list<int> mylist (myints,myints+8);
  std::list<int>::iterator p = mylist.begin();
  std::list<int>::iterator q = mylist.begin();
  advance(p, 2);
  advance(q, 5);

    for(p; p!=q; p++){
        mylist.remove(*p);
    }

  std::cout << "mylist contains:";
  for (std::list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

1 个答案:

答案 0 :(得分:1)

std::list::remove 从列表中删除具有指定的所有元素。

std::list::erase从列表中删除具有指定位置的元素。

您尝试使用的是擦除范围超载:erase (iterator first, iterator last)

mylist.erase(p, q);

会做你期望的事情