c++学习第十七讲---STL常用容器---list容器

list容器:

一、list基本概念:

list容器:一个双向循环链表。

注:list和vector是两个最常用的容器,各有优缺点。

二、list构造函数:

list<T> lst;                             //默认构造

list(beg, end);                       //将(beg, end)区间中的元素拷贝

list(n, elem);                         //将n个elem拷贝

list(const list& lst);                //拷贝构造

//list构造函数
void test01()
{
	list<int> L1;
	
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	list<int>L2(L1.begin(), L1.end());
	list<int>L3(L1);
	list<int>L4(10, 1000);
}

三、list赋值和交换:

assign(beg, end);                            //区间拷贝赋值

assign(n, elem);                              //n个元素拷贝赋值

list& operator=(const list& lst);        //等号重载

swap(lst);                                        //交换

//list赋值和交换
void test02()
{
	list<int> L1;

	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	list<int>L2;
	L2 = L1;

	list<int>L3;
	L3.assign(L1.begin(), L1.end());

	list<int>L4;
	L4.assign(10, 1000);

	L1.swap(L4);
}

四、list大小操作:

empty()               //判断容器是否为空

size();                 //返回元素个数

resize(n);            //重新指定容器大小,多删少默认

resize(n, elem);  //重新指定容器大小,多删少指定

//list大小操作
void test03()
{
	list<int>L1;
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	if (L1.empty())
	{
		cout << "L1为空" << endl;
	}
	else
	{
		printList(L1);//10 20 30 40
		cout << "L1的元素个数为:" << L1.size() << endl;
	}

	L1.resize(10,2);//10 20 30 40 2 2 2 2 2 2 
	
	L1.resize(2);//10 20
}

五、list插入和删除:

注:新的迭代器:remove --- 移除,删除全部对应元素

//list插入和删除
void test04()
{
	list<int>L;
	L.push_back(10);
	L.push_back(20);
	L.push_back(30);

	L.push_front(100);
	L.push_front(200);
	L.push_front(300);

	printList(L);//300 200 100 10 20 30
	L.pop_back();//300 200 100 10 20
	L.pop_front();//200 100 10 20

	L.insert(L.begin(), 1000);//1000 200 100 10 20

	L.erase(L.begin());//200 100 10 20

	L.remove(100);//200 10 20

	L.clear();
}

六、list数据存取:

注:list是链表,并非连续线性空间存储,不支持随机访问。

front();     //返回第一个元素

back();     //返回最后一个元素

ps : list 支持迭代器  ++、-- ,但不支持 +、-(随机访问)

//list数据存取
void test05()
{
	list<int>L1;
	L1.push_back(10);
	L1.push_back(20);
	L1.push_back(30);
	L1.push_back(40);

	//L[0];//报错,不可以用[]访问
	//L.at();//报错,不能用at

	cout << "第一个元素为:" << L1.front() << endl;
	cout << "最后一个元素为:" << L1.back() << endl;

	list<int>::iterator it = L1.begin();
	it++;//不报错
	it--;
	//it = it + 1;//报错,不支持随机访问
}

七、list反转和排序:

reverse();            //反转链表

sort();                  //链表排序,默认升序

注:如果想sort降序排列,可自己提供函数名。

//list反转和排序
bool myCompare(int v1,int v2)
{
	return v1 > v2;//降序排列,使v1>v2
}
void test06()
{
	list<int>L1;
	L1.push_back(20);
	L1.push_back(10);
	L1.push_back(50);
	L1.push_back(40);
	L1.push_back(30);

	L1.reverse();//30 40 50 10 20
	
	L1.sort();//默认升序,10 20 30 40 50
	L1.sort(myCompare);//自己提供比较函数,降序排列
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值