list是双向链表可以在任意位置插入元素,但无法访问任意位置的元素,只能顺序访问
新建list
list<int> l;
插入元素
//在头部插入
l.push_front(0);
//在尾部插入
l.push_back(1);
//在任意位置插入
auto it=l.begin();
advance(it,1);//advance函数用于增加迭代器
l.insert(it,2);//在第1个位置插入一个2
l.insert(it,4,999);//在第一个位置插入4个999
list<int> temp(10,666);
l.insert(--(--l.end()),temp.begin(),temp.end());//从倒数第二个位置开始插入temp的所有元素
删除元素
//按照数值删除
l.remove(666);//删除所有等于666的结点
//按照迭代器删除
for(it=l.begin();it!=l.end();it++)
if(*it==1) break;
l.erase(it);
//去重
l.unique();
//按照自定义逻辑删除
l.remove_if([](int n){return n%2==0;});//删除所有能被2整除的元素
元素排序
//无参排序(默认是从小到大less排序)
//有参排序:
//从大到小
l.sort(greater<int>());
//从小到大
l.sort(less<int>());
//自定义逻辑排序(自己写一个less排序)
l.sort([](const int i1,const int i2){
if(i1<i2) return true;
else return false;
});
获取元素
//正向遍历
for(it=l.begin();it!=l.end();it++)
cout<<*it<<endl;
//逆向遍历
auto rit=l.rbegin();
for(;rit!=l.rend();rit++)
cout<<*rit<<endl;
//使用范围for循环
for(int i:l)
cout<<i<<endl;
修改元素
//迭代器方式
auto it=l.begin();
for(it=l.begin();it!=l.end();it++)
if(*it==100) *it=9999;
返回长度
l.size();
返回list是否为空
l.empty();
总代码
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> l;
//插入元素
//在头部插入
l.push_front(0);
//在尾部插入
l.push_back(1);
//在任意位置插入
auto it=l.begin();
advance(it,1);//advance函数用于增加迭代器
l.insert(it,2);//在第1个位置插入一个2
l.insert(it,4,999);//在第一个位置插入4个999
list<int> temp(10,666);
l.insert(--(--l.end()),temp.begin(),temp.end());//从倒数第二个位置开始插入temp的所有元素
for(it=l.begin();it!=l.end();it++)
cout<<*it<<endl;
//删除元素
//按照数值删除
l.remove(666);//删除所有等于666的结点
//按照迭代器删除
for(it=l.begin();it!=l.end();it++)
if(*it==1) break;
l.erase(it);
//去重
l.unique();
cout<<"删除某些元素与去重之后:"<<endl;
for(it=l.begin();it!=l.end();it++)
cout<<*it<<endl;
//按照自定义逻辑删除
//l.remove_if([](int n){return n%2==0;});//删除所有能被2整除的元素
cout<<"按照自定义逻辑删除元素后:"<<endl;
for(it=l.begin();it!=l.end();it++)
cout<<*it<<endl;
//元素排序
//无参排序(默认是从小到大less排序)
//从大到小
l.sort(greater<int>());
//从小到大
l.sort(less<int>());
//自定义逻辑排序(自己写一个less排序)
l.sort([](const int i1,const int i2){
if(i1<i2) return true;
else return false;
});
//元素获取
//正向遍历
for(it=l.begin();it!=l.end();it++)
cout<<*it<<endl;
//逆向遍历
auto rit=l.rbegin();
for(;rit!=l.rend();rit++)
*rit=9999;
//使用范围for循环
for(int i:l)
cout<<i<<endl;
return 0;
}