c++之list容器

c++之list容器

list的使用方法:适合在任意位置快速插入移除元素


前言

1、list是一个双向链表容器,可高效的进行插入删除元素
2、list不可以随机存取元素,所以不支持at.(pos)函数和[]操作符
迭代器 ++、 --可以使用,但是it+3不可以使用

list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间

一、list用法

list<int> L;
  1. L.push_back(elem);//在容器尾部加入一个元素

  2. L.push_front(elem);//在容器头部加入一个元素

  3. L.pop_back();//删除容器中最后一个元素

  4. L.pop_front();//删除容器中第一个元素
    list数据存取

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

  6. L.back();//返回最后一个元素
    list与迭代器

  7. L.begin();//返回容器中第一个元素的迭代器

  8. L.end();//返回容器中最后一个元素之后的迭代器

  9. L.rbegin();//返回容器中倒数第一个元素的迭代器

10.L.rend();//返回容器中倒数最后一个元素的后面的迭代器

list 大小
10. list.size();//返回容器中元素个数
11. list.empty();//判断容器是否为空
12. list.resize(num);//重新制定容器的长度为num,若容器变长,用0填充新位置,如果变短,末尾超出容器长度元素被删除
13. list.reszie(num,elem);//重新制定容器的长度为num,若容器边长,用elem元素填充新位置,如果容器变短,末尾超出容器长度元素被删除
list 插入

  1. list.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。

  2. list.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。

  3. list.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
    list删除

  4. list.clear(); //移除容器的所有数据

  5. list.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。

  6. list.erase(pos); //删除pos位置的数据,返回下一个数据的位置。

  7. list.remove(elem);//删除容器中所有与elem值匹配的元素

二、用法案例

基本用法

#include<list>
#include <iostream>
using namespace std;
void main()
{
	list<int> l;
	//输出结果为0
	cout<<"list大小:"<<l.size()<<endl;
	for(int i=0;i<10;i++)
	{
		l.push_back(i);//从尾部插入元素
	}
	//输出结果为10
	cout<<"list大小:"<<l.size()<<endl;
	//使用迭代器遍历 链表     输出结果:0,1,2,3,4,5,6,7,8,9
	list<int>:iterator it =l.begin();
	while(it!=l.end())
	{
		cout<<*it<<" ";
		it++;
    }
	

list链表不支持随机访问

//list链表不支持随机访问
	list<int>:iterator it=l.begin();
	it++;
	it++;
	it++;
	l.insert(it,100);
//插入100的位置是   0 1 2 100 3 4 5 6 7 8 9
结论:链表的结点 index序号从0号位置开始 ,在3号位置插入元素,让原来的3号位置变成4号位置,原来的4号位
置变成5号位置

list插入操作

	list<int> lstA;
	list<int> lstB;

	lstA.push_back(1);
	lstA.push_back(3);
	lstA.push_back(5);
	lstA.push_back(7);
	lstA.push_back(9);

	lstB.push_back(2);
	lstB.push_back(4);
	lstB.push_back(6);
	lstB.push_back(8);

	lstA.insert(lstA.begin(), 11);		//{11, 1, 3, 5, 7, 9}
	lstA.insert(++lstA.begin(),2,33);		//{11,33,33,1,3,5,7,9}
	lstA.insert(lstA.begin() , lstB.begin() , lstB.end() );	//{2,4,6,8,11,33,33,1,3,5,7,9}

list删除操作

删除区间内的元素

	list<int> L;
	cout<<"list的大小:"<<L.size()<<endl;
	for(int i=0;i<10;i++)
	{
		L.push_back(i);
	}
	//遍历list链表
	for(list<int>::iterator it=L.begin();it!=end();it++)
	{
	cout<<*it<<" ";
	}
	cout<<endl;
	list<int>::iterator it1=L.begin();
	list<int>::iterator it2=L.begin();
	it2++;
	it2++;
	it2++;
	L.erase(it1,it2); //左闭右开 L.erase(0,3)l
	

list.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
也就是上面删除的是0、1、2这3个元素不包括3,

删除容器中某个重复的元素

L.remove(elem); 
比如链表中元素如下:12343333744323333
要删除链表中3元素
L.remove(3);

删除链表的所有元素

L.clear();

list反序排列

list.reverse();     //反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。
	list<int> lstA;
	
	lstA.push_back(1);
	lstA.push_back(3);
	lstA.push_back(5);
	lstA.push_back(7);
	lstA.push_back(9);

	lstA.reverse();			//9 7 5 3 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟道xn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值