【STL】list的基本操作

Posted on 2024-03-18 14:35  木易meow  阅读(8)  评论(0编辑  收藏  举报
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
bool cmp(int x,int y){
	return x>y;
}
signed main(){
	list<int>lst;//建立
	for(int i=1;i<=6;i++){
		lst.push_back(i);
	}//尾插
	for(int i=10;i>=8;i--){
		lst.push_front(i);
	}//头插

	cout<<lst.size()<<endl;//尺寸
	lst.resize(1);//更改尺寸

	for(auto i:lst){
		cout<<i<<' ';
	}//发现减小尺寸之后只保留第一个,其余全部丢失
	cout<<endl;
	
	lst.resize(8);
	for(auto i:lst){
		cout<<i<<' ';
	}
	cout<<endl;//发现扩大尺寸之后新的部分填充为0

	int a[6]={00,22,11,33,44,55};
	list<int>la(a+1,a+3);//开始的位置 结束的下一个(左闭右开
	for(auto i:la){
		cout<<i<<' ';
	}
	cout<<endl;//用数组进行初始化list

	lst.insert(++++++lst.begin(),2);// 任意位置插入一个元素 ++往后推一个
	for(auto i:lst){
		cout<<i<<' ';
	}
	cout<<endl;

	swap(lst,la);//交换两个同类型容器的元素
	for(auto i:lst){
		cout<<i<<' '; 
	}
	cout<<endl;

	la.unique();//删除容器中相邻的重复元素
	for(auto i:la){
		cout<<i<<' ';
	}
	cout<<endl;
	cout<<la.size()<<endl;

	list<int>ll1;
	for(int i=1;i<=10;i++)ll1.push_back(i);
	list<int>ll2;
	for(int i=-6;i<=2;i++)ll2.push_back(i);
	ll1.merge(ll2,cmp);//合并2个有序的链表并使之有序,从新放到lst里,释放la。
	//如果cmp函数与这两个链表的排序方式不同或链表无序,会直接简单拼接
	for(auto i:ll1){
		cout<<i<<' ';
	}
	cout<<endl;
	cout<<ll2.size()<<endl;

	list<int>ls{0,1,4,8};
	list<int>lls{9,8,7,55};
	ls.splice(ls.end(),lls);  //    将c2连接在c1的beg位置,释放c2
	for(auto i:ls){
		cout<<i<<' ';
	}
	cout<<endl;

	list<int>re(ls);//直接用链表初始化链表
	for(auto i:re){
		cout<<i<<' ';
	}
	cout<<endl;

	re.reverse();//指定链表的反转
	for(auto i:re){
		cout<<i<<' ';
	}
	cout<<endl;
}