如何在 C++ 中删除列表中的某些元素
Posted
技术标签:
【中文标题】如何在 C++ 中删除列表中的某些元素【英文标题】:How to remove some element in a list in 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
似乎是一个奇怪的选择,你知道它的作用吗?
【参考方案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以上是关于如何在 C++ 中删除列表中的某些元素的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中,如何从列表中删除包含某些类型字符的任何元素?