C++标准库---list使用注意事项

list使用需要注意的几点:

1.list不支持随机存取,即如果你要存取第5个元素,你必须顺着串链一一爬过前4个元素,所以在list中随机遍历任意元素,是很缓慢的行为;

2.任何位置(不只是两端)执行元素的安插和删除都非常快,始终是常数时间内完成,因为无需移动任何其他元素,实际上内部只是进行了一些指针操作而已;

3.安插和删除动作并不会造成指向其他元素的各个pointers,references,iterators失效;

4.list对于异常有着:要么操作成功,要么什么都不发生。

5.list提供了不少特殊的成员函数,专门用于移动元素,较通用的STL算法,这些函数执行起来速度更快,因为无须拷贝和移动,只需调整若干指针即可;

6.list内部提供了很多高效快速的成员函数,用来移动list内部元素或者不同list之间的元素;


代码示例:

//list简单示例
#include<iostream>
#include<list>
#include<string>
#include<algorithm>

using namespace std;

void printlists(const list<int>&l1,const list<int>& l2)
{
	cout<<"list1: ";
	copy(l1.begin(),l1.end(),ostream_iterator<int>(cout," "));
	cout<<endl;
	cout<<"list2: ";
	copy(l2.begin(),l2.end(),ostream_iterator<int>(cout," "));
	cout<<endl;
}

int main()
{
	list<int> list1,list2;

	for(int i=0;i<6;i++)
	{
		list1.push_back(i);
		list2.push_front(i);
	}

	printlists(list1,list2);

	list2.splice(find(list2.begin(),list2.end(),3),list1);//将list1中的元素转移到list2的‘3’元素之前

	printlists(list1,list2);

	list2.splice(list2.end(),list2,list2.begin());//将list2内的list2.begin()的元素转移到list2内的list2.end()所指的位置

	printlists(list1,list2);

	list2.sort();//按照 < 排序
	list1=list2;

	list2.unique();//如果存在若干相邻元素值相等,就移除重复元素

	printlists(list1,list2);

	list2.push_back(7);

	printlists(list1,list2);

	list1.merge(list2);//首先lsit1和list2必须已序,并且大小顺序相同,将lsit2的全部元素转移到list1,保证合并后仍然已序

	printlists(list1,list2);

	system("pause");
	return 0;
}

运行结果:


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值