前面我们学会《如何为STL库中list添加元素?》,本节将为读者详细介绍如何删除list容器内的元素。当然,读者也可自行跳转《初识STL库中的list容器》查询list成员函数表,查找“删除”、“移除”等关键字查看具体函数,加深记忆。

如今学到这里,看到删除字样,我们第一反应就要是这个pop_front()、pop_back()头删尾删,还有erase()按位置迭代器删,clear()一键全清。不同于前面我们学习的序列式容器,list还有unique(),unique意思是“独一无二”,所以它的功能是删除重复的连续元素;相比deque的算法remove()+成员函数erase()去除所有指定元素,list直接给你remove()成员函数,更直接、更形象,实现容器内指定元素的全部清除,而且还有remove_if()来删除满足条件的元素。话不多说,上代码:



#include<bits/stdc++.h>
#include<list>
/* 如何为list容器删除元素 */
using namespace std;
/*重点讲解:通过erase()为list删除元素*/ 
void test1()
{
/*erase()*/
list<int> l{1,2,3,4,5,7,8,9,10};
l.erase(++l.begin()) ;//erase(const_iterator pos)
cout << "erase(++l.begin())在l容器内删除第2个元素后输出所有元素: ";
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout<<'\n' ;
l.erase(++l.begin(),--l.end()) ;//erase(const_iterator first, const_iterator last)
cout << "erase(++l.begin(),--l.end())在l容器内删除除首位元素以外的所有元素: ";
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout << '\n';
cout << '\n';
} 
/*练习头删尾删和clear()全清空*/ 
void test2()
{
list<int> l{1,2,3,4,5};
/*pop首尾元素*/
l.pop_front() ;//头删 
cout << "pop_front()删除第一个元素后输出所有元素: ";
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout<<'\n' ;
l.pop_back() ;//尾删
cout << "pop_back()删除最后一个元素后输出所有元素: ";
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout<<'\n' ;
 /*clear()一键清空*/
 l.clear() ;
cout << "clear()后l.size()为:"<< l.size()<<'\n';
cout<<'\n' ;
}
/*使用quique()去重*/ 
void test3()
{
list<int> l{1,2,2,3,4,4,5,6,6,7} ;
cout<<"原容器为:" ;
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout<<'\n' ;
l.unique();
cout << "通过unique()去除连续重复元素后:" ;
for(auto it=l.begin();it!=l.end();++it) cout << *it<<" ";
cout<<'\n' ;
cout<<'\n';
}
/*使用remove()、remove()_if去除指定元素*/ 
void test4()
{
/*remove(n) 去除lsit容器内所有n*/ 
list<int> l1{1,3,2,3,3,3,4,3,5,3} ;
cout<<"原容器为:" ;
for(auto it=l1.begin();it!=l1.end();++it) cout << *it<<" ";
cout<<'\n';
l1.remove(3);
cout << "通过remove()去除连续重复元素3后:" ;
for(auto it=l1.begin();it!=l1.end();++it) cout << *it<<" ";
cout<<'\n' ;
/*remove_if() 去除lsit容器内*/ 
list<int> l2{1,2,3,4,5,6,7,8,9,10} ;
cout<<"原容器为:" ;
for(auto it=l2.begin();it!=l2.end();++it) cout << *it<<" ";
cout<<'\n';
l2.remove_if([](int val){return val%2==0;});
cout << "通过remove_if()去除偶数元素后:" ;
for(auto it=l2.begin();it!=l2.end();++it) cout << *it<<" ";
cout<<'\n' ;
}
  
int main(){
    test1();
   test2();
   test3();
   test4() ;
    return 0;
}

代码将每一个删除函数都使用了一遍,也是成功编译了:

删除list内元素

读者是不是对这些删除函数感到既激动又惊讶呢,赶快打开编译器操练起来吧!

总结:本节主要讲解了如何对list容器进行删除元素的操作,list元素自己封装了一个remove函数直接删除指定元素,同时还能通过remove_if()删除符合条件的元素;list自己有一个去除连续重复元素unique(),这个在算法竞赛上有妙用,能够配合排序进行去重操作。

点赞(2)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)