List容器基础

// List 简介
list 是一个 双向链表容器 , 可高效地进行插入删除元素。
list 不可以随机存取元素, 所以不支持 at.(pos) 函数与 [] 操作符。 It++(ok) it+5(err)

#include <list>

#include"iostream"
using namespace std;
#include"list"
void display(list<int>&l1)
{
	list<int>::iterator it = l1.begin();//遍历
	while (it != l1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;
}/*
list 对象的默认构造
   list 采用采用模板类实现,对象的默认构造形式: list<T> lstT; 如:
   list<int> lstInt; //定义一个存放 int 的 list 容器。
   list<float> lstFloat; //定义一个存放 float 的 list 容器。
   list<string> lstString; //定义一个存放 string 的 list 容器。//尖括号内还可以设置指针类型或自定义类型。
list 头尾的添加移除操作
   list.push_back(elem); //在容器尾部加入一个元素
 list.pop_back(); //删除容器中最后一个元素
 list.push_front(elem); //在容器开头插入一个元素
 list.pop_front(); //从容器开头移除第一个元素*/
int main01()
{
	//list<T>l1;尖括号内可以是基本类型和自定义类型
	list<int>l1(3,9);
	list<int>l2(l1);
	list<int>l3(l1.begin(),l1.end());
	l1.push_front(100);  //头部插入元素
	l1.push_back(100);   //尾部插入元素
	display(l1);
	l1.pop_back();   //弹出头部元素
	l1.pop_front();  //弹出尾部元素
	display(l1);
/*
list 的数据存取
	list.front(); //返回第一个元素。
	list.back(); //返回最后一个元素。	

	//list<int>::iterator it = l1.begin()+1;
	//it=it+5;//list 不支持随机访问元素。即[]\at()不可用
*/
/*
list 与迭代器
    list.begin(); //返回容器中第一个元素的迭代器。
    list.end(); //返回容器中最后一个元素之后的迭代器。
    list.rbegin(); //返回容器中倒数第一个元素的迭代器。
    list.rend(); //返回容器中倒数最后一个元素的后面的迭代器。
*/
/*
list 对象的带参数构造
	list(beg, end); //构造函数将[beg, end)区间中的元素拷贝给本身。 注意该区间是闭右开的区间。
    list(n, elem); //构造函数将 n 个 elem 拷贝给本身。
	list(const list &lst); //拷贝构造函数。
	*/
/*
list 的赋值
  list.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。 注意该区间是
左闭右开的区间。
  list.assign(n,elem); //将 n 个 elem 拷贝赋值给本身。
  list& operator=(const list &lst); //重载等号操作符
  list.swap(lst); // 将 lst 与本身的元素互换。
*/
	return 0;
}


/*插入与删除元素*/
/*list 的插入
 list.insert(pos,elem); //在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置。
 list.insert(pos,n,elem); //在 pos 位置插入 n 个 elem 数据, 无返回值。
 list.insert(pos,beg,end); //在 pos 位置插入[beg,end)区间的数据, 无返回值。
*/
int main02()
{
	//插入元素
	list<int>l1(3, 10);
	list<int>l2(2,1);
	l1.insert(l1.begin(), 100);//头部插入100
	l1.insert(l1.end(),100);//尾部插入100
	list<int>::iterator it = l1.begin();
	for (int i = 0; i < 3; i++)
	{
		it++;//it=3
	}
	l1.insert(it, 3, 5);//list链表的结点是从0开始计数,第四个位置插入555
	display(l1);//100,10,10,5,5,5,10,100

	l1.insert(it, 0);//第七个位置插入0,插入后,it自动增加,所以it=6;
	display(l1);//100,10,10,5,5,5,0,10,100
	
	l1.insert(it, l2.begin(), l2.end());//it=7,第8个位置插入l2
	display(l1);//100,10,10,5,5,5,0,1,1,10,100


	//删除元素
/*list 的删除
 list.clear(); //移除容器的所有数据
 list.erase(beg,end); //删除[beg,end)区间的数据, 返回下一个数据的位置。
 list.erase(pos); //删除 pos 位置的数据, 返回下一个数据的位置。
 lst.remove(elem); //删除容器中所有与 elem 值匹配的元素。
*/
	l1.remove(10);//移除所有10;
	display(l1);//100,5,5,5,0,1,1,100

	list<int>::iterator it1 = l1.begin();
	l1.erase(it1);  //5,5,5,0,1,1,100
	display(l1);

	list<int>::iterator first = l1.begin();
	list<int>::iterator last = l1.begin();
	last++;
	last++;
	last++;//3
	l1.erase(first,last);//0,1,1,100
	display(l1);

	l1.clear();
	cout << "l1.Size: "<<l1.size() << endl;
	return 0;
}

/*操作函数*/
/*list 的正反序排列
   lst.sort()
 lst.reverse();*/
int main03()
{
	list<int>l1(3, 10);
	l1.push_front(100);  
	l1.push_back(5);
	l1.push_back(1);
	l1.push_back(25);
	l1.push_back(100);
	l1.sort();//1,5,10,10,25,100 正序排列
	display(l1);
	l1.reverse();//100,25,10,10,5,1 反序排列
	display(l1);
	
	return 0;
}
int main()
{
	main01();//初始化
	main02();//插入和删除
	main03();
	system("pause");
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值