List..

List的使用

test.cpp

#include <iostream>
#include <list>
#include <vector>
using namespace std;
namespace std
{
	void test_list1()
	{
		//初始化
		list<int> lt1;
		//10个5
		list<int> lt2(10, 5);
		//自己的迭代器来初始化
		list<int> lt3(lt2.begin(), lt2.end());
		//别的迭代器来初始化
		vector<int> v = { 1, 2, 3, 4, 5 };
		list<int> lt4(v.begin(), v.end());
		
		//遍历--不支持[]因为物理空间不连续
		list<int>::iterator it4 = lt4.begin();
		while (it4 != lt4.end())
		{
			cout << *it4 << " ";
			++it4;
		}
		cout << endl;
		for (auto e : lt3)
		{
			cout << e << " ";
		}
		cout << endl;
		//赋值--10个5变为5个3
		lt3.assign(5, 3);
		for (auto e : lt3)
		{
			cout << e << " ";
		}
		cout << endl;
	}
	void test_list2()
	{
		list<int> lt;
		//尾插
		lt.push_back(1);
		lt.push_back(2);
		lt.push_back(3);
		lt.push_back(4);
		//尾删
		lt.push_front(10);
		lt.push_front(20);
		lt.push_front(30);
		lt.push_front(40);
		//尾插尾删很快--底层是带头双向循环的链表
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		//尾删
		lt.pop_back();
		lt.pop_back();
		lt.pop_back();
		lt.pop_back();
		lt.pop_front();
		lt.pop_back();
		lt.pop_back();
		lt.pop_back();
		//lt.pop_back();
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
	}
	void test_list3()
	{
		list<int> lt;
		lt.push_back(1);
		lt.push_back(2);
		lt.push_back(3);
		lt.push_back(4);
		//因为没有fine
		list<int>::iterator pos = find(lt.begin(), lt.end(), 2);
		if (pos != lt.end())
		{
			lt.insert(pos, 20);
		}
		// 这里pos不会失效--2被改为100
		cout << *pos << endl;
		*pos = 100;
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
	}
	void test_list4()
	{
		list<int> lt;
		lt.push_back(1);
		lt.push_back(2);
		lt.push_back(3);
		lt.push_back(4);
		list<int>::iterator pos = find(lt.begin(), lt.end(), 2);
		if (pos != lt.end())
		{
			lt.erase(pos);
		}
		// 这里pos会失效,因为pos指向的节点已经被释放了,出现野指针
		cout << *pos << endl;
		*pos = 100;
	}
	void test_list5()
	{
		list<int> lt;
		lt.push_back(1);
		lt.push_back(2);
		lt.push_back(3);
		lt.push_back(4);
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		//清掉所有节点除了头结点
		lt.clear();
		//有头结点所以还可以继续插入数据
		lt.push_back(10);
		lt.push_back(20);
		lt.push_back(30);
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;

		list<int> lt1;
		lt1.push_back(100);
		lt1.push_back(200);
		// c++98,两个list的数据交换
		lt.swap(lt1);
		swap(lt, lt1);
	}
	void test_list6()
	{
		list<int> lt;
		lt.push_back(1);
		lt.push_back(2);
		lt.push_back(2);
		lt.push_back(3);
		lt.push_back(30);
		lt.push_back(2);
		lt.push_back(4);
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		// >  降序 , <  升序
		//默认升序
		//it.sort();
		//降序
		//有名对象
		//greater<int> g;
		//lt.sort(g);
		//匿名对象
		lt.sort(greater<int>());
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		// 去重->前提要排序,排序完才能去掉重复的值
		lt.unique();
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		//删除--有就删,无也可以运行
		lt.remove(3);
		lt.remove(5);
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
		//逆置
		lt.reverse();
		for (auto e : lt)
		{
			cout << e << " ";
		}
		cout << endl;
	}
	void TestOP()
	{
		srand(time(0));
		const int N = 100000;
		list<int> lt;
		vector<int> v;
		//先开空间再push_back
		v.resize(N);
		for (int i = 0; i < N; ++i)
		{
			v[i] = rand();
			lt.push_back(v[i]);
		}
        //vector的排序
		int begin1 = clock();
		sort(v.begin(), v.end());
		int end1 = clock();
		//链表的排序
		int begin2 = clock();
		lt.sort();
		//sort(lt.begin(), lt.end());
		int end2 = clock();

		cout << "vector sort" << end1 - begin1 << endl;
		cout << "list sort" << end2 - begin2 << endl;
	}
}
int main()
{
	std::test_list1();
	return 0;
}
  • 1
    在这里插入图片描述

  • 2
    在这里插入图片描述

  • 3
    在这里插入图片描述

  • 4
    在这里插入图片描述

  • 5
    在这里插入图片描述

  • 6
    在这里插入图片描述

  • tetsOp

在这里插入图片描述

迭代器失效

在这里插入图片描述

容器迭代器的分类

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值