list基础知识

1、list是一个双向链表,对于任何位置的元素的插入和元素移除,list永远是常数时间

2、list有一个重要性质:插入操作和接合操作都不会造成原有list迭代器的失效,甚至list的元素的删除操作(erase),也只有“指向被删除元素”的那个指针失效,其他迭代器不受影响

	int arr[] = {87,65,73,47,75,73,78,65};
	list<int>ls_scores(arr,arr+8);

	int flag=0;
	for(list<int>::iterator iter = ls_scores.begin(); iter != ls_scores.end();)
	{
		if(*iter == 47 ) 
		{
			//如果调用ls_scores.erase(iter); 访问iter的时候程序会崩溃
			//改为iter++,iter指向被删除元素的下一个元素,cout << *iter能够正常打印
			ls_scores.erase(iter++);
		}
		else
			iter++;
		cout << *iter<< endl;
		cout << &(*iter) << endl;
	}

对比vector

	int arr[] = {87,65,73,47,75,73,78,65};
	vector<int>vec_scores(arr,arr+8);

	int flag=0;
	for(vector<int>::iterator iter = vec_scores.begin(); iter != vec_scores.end();)
	{
		if(*iter == 47 ) 
		{
			//如果调用ls_scores.erase(iter); 访问iter的时候,程序会崩溃
			//改为iter++,iter指向被删除元素的下一个元素,由于指向下一个元素的迭代器也失效了,程序崩溃
			vec_scores.erase(iter);
			//正确做法
			//iter = vec_scores.erase(iter);
		}
		else
			iter++;
		cout << *iter<< endl;
		cout << &(*iter) << endl;
	}

3、算法中提供的sort()函数,不适用于list,list自己实现了sort

	int arr[] = {87,65,73,47,75,73,78,65};

	//算法sort
	vector<int>vec_scores(arr,arr+8);
	sort(vec_scores.begin(),vec_scores.begin()+3);
	//list自己实现sort,list不能对指定范围内的元素排序
	list<int>ls_scores(arr,arr+8);
	ls_scores.sort();
4、list是环状链表,实现方式:刻意在环状链表的尾端加上一个空白节点,这样符合迭代器的“前闭后开”区间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值