STL基础系列之--list

 

     链表(list)双向链表容器不支持随机访问,访问链表元素需要指出从链表的某个端点开始,插入和删操作所花费的时间是固定的,和该元素的位置无关。

在任何位置插入和删除动作都很快,不像vector只在末尾进行操作。

 

STL list容器由于采用了双向迭代器,不支持随机访问,所以标准库的merge(), sort()等功能函数都不适用,list单独实现了merge(),sort()等函数。

//STL--list总结
//STL list容器由于采用了双向迭代器,不支持随机访问,所以标准库的merge(), sort()等功能函数都不适用,list单独实现了merge(),sort()等函数。
#include<iostream>
#include<list>
#include<algorithm>
#include<cstdio>
#include<ctime>
#define MAXN 10

using namespace std;

void output(int n)
{
	cout<<n<<" ";
}

bool compare(int a,int b)
{
	return (a>b);
}

bool myFun(int n)
{
	return (n==9);
}

int main()
{
	list<int> list1;

	cout<<"list1:"<<endl;
	int i;  
    srand(time(NULL));  
    for (i = 0; i < MAXN; ++i)  
		list1.push_back(rand()%100);   

	cout<<"原始数字:";
	for_each(list1.begin(),list1.end(),output);
	cout<<endl;

	list1.sort(compare);//注意排序调用方式

	cout<<"降序排列:";
	for_each(list1.begin(),list1.end(),output);
	cout<<endl;

	list1.sort();//注意排序调用方式 

	cout<<"升序排列:";
	for_each(list1.begin(),list1.end(),output);
	cout<<endl;

	

	list<int> list2;
	
	cout<<"list2:"<<endl;

	list2.assign(list1.begin(),list1.end());

	cout<<"原始数字:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	list2.push_back(101);//在list的末尾添加一个元素

	cout<<"加入元素后:";
	for(list<int>::iterator it=list2.begin();it!=list2.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;

	list1.swap(list2);

	cout<<"交换后list1:";
	for_each(list1.begin(),list1.end(),output);
	cout<<endl;

	cout<<"交换后list2:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	//list2.clear();//清空链表

	//list2.push_front(100);//在list的头部添加一个元素

	list2.merge(list1);//必须是有序序列,不然vs2012出错,不能合并
	
	cout<<"list1,list2合并后:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	cout<<"合并后list1:";
	for_each(list1.begin(),list1.end(),output);//合并后list1为空
	cout<<endl;

	list2.unique();

	cout<<"list2删除重复元素:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	list2.insert(list2.begin(),2,9);//在指定位置插入两个元素

	cout<<"插入两个元素后:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	list2.remove_if(myFun);//遍历一遍list
	cout<<"删除指定两个元素后:";
	for_each(list2.begin(),list2.end(),output);
	cout<<endl;

	system("pause");
	return 0;
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值