list基本用法程序举例

      list作为STL重要的容器之一,保存在其中的每个元素之间使用链表相连,故而访问元素没有像数组访问模式一样的vector快,但是随机插入元素却比vector快,原理和数组与链表的操作有异曲同工之妙。对每个元素分配空间,不存在空间不够而重新分配的情况。

      下面就以程序的方式展示list的基本操作,包括容器构造插入元素(包括指定位置插入多个元素),排序首尾元素输出与输入逆序删除重复元素擦除指定位置元素逆向输出等基本操作。

       建议程序运行结果和程序语言比对查看,这样对基本操作符号命令的印象更加深刻。

#include<iostream>//list用法
#include<list>
#include<string>
#include<vector>
using namespace std;
int main()
{     
	//构造函数 
	string temp="I love you";
	vector<int>temp1(10,20);
	list<int>test1;//构造函数 1
	list<float>test2(10); //构造函数2 
	list<string>test3(10,"I love you");//构造函数3 
	list<char>test4(temp.begin(),temp.end());//构造函数4 
	list<char>test5(test4);//复制构造函数(构造函数5) 

	//判断是否为空操作
	if(test1.size()==0)cout<<"list1的size()为空"<<endl; 
	if(test2.empty())cout<<"list2为空"<<endl;

	//增加元素
	test1.push_back(1);//向尾部追加 
	test1.push_front(10);//向头部添加
	cout<<"after push_back(1) and push_front(10):"<<endl;
	list<int>::iterator it=test1.begin();
	for(;it!=test1.end();it++)//不能用it=it+1和it+=1 
		cout<<*it<<"\t"; 
	cout<<endl;

	cout<<"after insert(++test1.begin(),100)"<<endl;
	test1.insert(++test1.begin(),100);//向test1中某位置添加元素 
	it=test1.begin();
	for(;it!=test1.end();it++)
		cout<<*it<<"\t"; 
	cout<<endl;

	cout<<"after insert(++test1.begin(),5,30)"<<endl;
	test1.insert(++test1.begin(),5,30);//向test1中某位置添加n个相同元素 
	it=test1.begin();
	for(;it!=test1.end();it++)
		cout<<*it<<"\t"; 
	cout<<endl;
	cout<<"after insert(++++test1.begin(),temp1.begin(),temp.end())"<<endl;
	test1.insert(++++test1.begin(),temp1.begin(),temp1.end());//想test1中添加其他容器区间内的元素
	it=test1.begin();
	for(;it!=test1.end();it++)
		cout<<*it<<"\t"; 
	cout<<endl;

	//排序
	cout<<"after sort:"<<endl;
	test1.sort(); 
	for(it=test1.begin();it!=test1.end();it++)
		cout<<*it<<"\t";
	cout<<endl;

	//删除元素
	test1.pop_back();
	test1.pop_front(); 
	cout<<"pop_back()和pop_front之后"<<endl;
	for(it=test1.begin();it!=test1.end();it++)
		cout<<*it<<"\t";
	cout<<endl;

	test1.remove(20);
	test1.erase(++test1.begin());
	test1.erase(++test1.begin(),------test1.end());//-------之后的语言没用
	cout<<"test1.remove(20)和两次test1.erase(++begin())之后"<<endl; 
	for(it=test1.begin();it!=test1.end();it++)
		cout<<*it<<"\t";
	cout<<endl;
	
	//逆向输出 
	cout<<"逆向输出 "<<endl;
	list<int>::reverse_iterator it1=test1.rbegin();
	for(;it1!=test1.rend();it1++)
		cout<<*it1<<"\t";
	cout<<endl; 
	
	//获取头元素和尾元素的引用 
	cout<<"front and back"<<endl;
	cout<<test1.front()<<endl;
	cout<<test1.back()<<endl;

	//排序
	cout<<"sort again:";
	test1.sort(); 
	for(it=test1.begin();it!=test1.end();it++)
		cout<<*it<<"\t";
	cout<<endl;

	//删除重复
	cout<<"unique:"<<endl;
	test1.unique(); 
	for(it=test1.begin();it!=test1.end();it++)
		cout<<*it<<"\t";
	cout<<endl;

	//反转
	cout<<"反转后"<<endl;
	test1.reverse();
	for(it=test1.begin();it!=test1.end();it++)//不能用it=it+1和it+=1 
		cout<<*it<<"\t";
	cout<<endl;
}  
运行结果如下:


后续再整理其他容器的基本操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值