【问题标题】:How to remove some element in a list in C++如何在 C++ 中删除列表中的某些元素
【发布时间】:2017-10-30 13:52:39
【问题描述】:

我想删除列表中的一些元素,在下面的实现中,我想删除 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;
}

【问题讨论】:

  • mylist 中删除p 后,您认为p++ 应该做什么?
  • 这个程序运行成功,但是没有打印出来
  • 您最初向mylist 添加了多少元素?
  • 打字错误,应该是myints+8
  • std::list::remove 似乎是一个奇怪的选择,你知道它的作用吗?

标签: c++ list stl


【解决方案1】:

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

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

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

mylist.erase(p, q);

会如你所愿

【讨论】:

  • 谢谢。还有一个问题,如果我把p和q都改成const_iterator,怎么用erase?
  • @kdhug886 也一样。请参阅链接参考:“成员类型 iterator 和 const_iterator 是指向元素的双向迭代器类型。” (C++11)
  • 但是当我改变这两行时: list::const_iterator p = mylist.begin();列表::const_iterator q = mylist.begin();出现错误:错误:没有匹配函数调用 'std::__cxx11::list::erase(std::__cxx11::list::const_iterator&, std::__cxx11::list::const_iterator&)' mylist.erase(p, q);
  • 好吧,it works for me 你至少得有 c++11 编译器
猜你喜欢
  • 2018-09-04
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多