STL栈、队列、链表容器特点

博客介绍了栈、队列和链表三种容器。栈遵循先进后出规则,不能遍历,只能从栈顶操作;队列是先进先出,一端插入一端删除,也不能遍历;链表是双向链表,插入和删除效率好,可迭代遍历,但需额外空间保存节点关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈容器——stack容器

规则:先进后出

特点:
栈不能遍历,不支持随机存储,不提供迭代器,只能通过top从栈顶获取和删除元素
要想访问栈底元素,只能不断出栈,没有at与[ ]

队列容器——queue

规则:先进先出

特点:
一端插入,另一端删除
不能进行遍历,不提供迭代器,不支持随机访问

队列与栈的实例
queue<stack<int>> v;
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	stack<int> s2;
	s2.push(4);
	s2.push(5);
	s2.push(6);

	v.push(s1);
	v.push(s2);

	while (!v.empty()){
		while (!v.front().empty()){
			cout << v.front().top() << " ";
			v.front().pop();		
		}
		v.pop();
	}

在这里插入图片描述

链表容器——list

特点:
双向链表,在任何位置插入和删除效率都比较好,相对于数组来说,不需要移动元素。不支持随机访问,在保存数据的同时,需要保存节点和节点之间的关系,所以需要额外的空间开销。可以使用迭代器遍历,因为非连续空间,访问下一个节点只能使用++运算符,不能+=。自己提供了sort()方法,不能使用算法提供的sort,因为不支持随机访问。

//插入和删除
	list<int> list1;
	list1.push_back(100);
	list1.push_front(200);
	list1.insert(list1.begin(), 300);
	list1.insert(list1.begin(), 200);
	list1.insert(list1.end(), 400);
	list1.insert(list1.end(), 200);
	list<int>::iterator it = list1.begin();
	it++;
	it++;

//排序
/*
	list自带的排序
	算法sort,支持可随机访问的容器
*/
bool mycompare(int v1,int v2)
{
	return v1 > v2;
}

	list<int> mlist;
	mlist.push_back(5);
	mlist.push_back(21);
	mlist.push_back(33);
	mlist.push_back(9);
	mlist.push_back(1);
	for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	mlist.sort();	//从小到大
	for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	mlist.sort(mycompare);	//从大到小
	for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值