C++初级_stack和queue容器适配器

C++初级_stack和queue容器适配器

1.stack
(1)stack是一种容器适配器,专门用于后进先出的环境中,其删除和插入只能在容器的一端进行
(2)stack是作为容器适配器被实现的,容器适配器是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素。元素特定容器的尾部(栈顶)被压入和弹出
(3)stack底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持一下操作:empty、back、push_back、pop_back
(4)标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为statck指定特定的底层容器板,则使用deque
stack使用

  • stack()
  • empty()
  • size()
  • top()
  • push()
  • pop()
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> s;
	for (int i = 0; i < 10; i++)
	{
		s.push(i);
	}
	int len = s.size();
	while (len--)
	{
		cout << s.top() << " ";
		s.pop();
	}
	return 0;
}

2.queue
(1)队列是一种容器适配器,用于先进先出的操作,在容器的一端插入元素,另一端删除元素
(2)队列作为容器适配器被实现,queue提供一组特定的成员函数来访问其元素,元素从队尾入队列,从对头出队列
(3)底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器至少支持以下操作:empty、size、front、back、push_back、pop_front
(4)标准容器类deque和list满足这些要求,默认情况下,使用deque
queue的使用

  • queue()
  • empty()
  • size()
  • front()
  • back()
  • push()
  • pop()
#include<iostream>
#include<queue>

using namespace std;

int main()
{
	queue<int> q;
	for (int i = 0; i < 10; i++)
	{
		q.push(i);
	}
	int len = q.size();
	while (len--)
	{
		cout << q.front() << " ";
		q.pop();
	}
	return 0;
}

3.priority_queue
优先级队列默认使用vector作为其底层存储数据的容器,在vector上使用了堆算法将vector中的元素构造成堆的结构,因此priority_queue就是堆,所有用到堆的位置,都可以考虑使用priority_queue
注:默认情况下priority_queue是大堆
priority_queue的使用

  • priority_queue()/priority_queue(first,last)
  • empty()
  • top():返回堆顶元素
  • push(x)
  • pop():删除堆顶元素
#include<iostream>
#include<queue>

using namespace std;

int main()
{
	priority_queue<int> pq;
	pq.push(23);
	pq.push(54);
	pq.push(45);
	pq.push(12);
	pq.push(56);
	pq.push(67);
	cout << pq.top() << endl;//67
	pq.pop();
	cout << pq.top() << endl;//56
	return 0;
}

4.容器适配器
适配器:一种设计模式,将一个类的接口转换成客户希望的另一个接口
容器适配器stack、queue、priority_queue:虽然stack、queue、priority_queue中可以存放元素,但在STL中并没有将其划为容器的行列,而是将其称为容器适配器,这是因为每个容器在底层都有自己的实现方式,而stack、queue、priority_queue只是在底层将其他容器进行了封装
为什么选择deque作为stack、queue的底层默认容器?
stack是后进先出的特殊线性数据结构,只要具有push_back()和pop_back()操作的线性结构,都可以作为stack的底层容器,比如vector和list都可以;queue是先进先出的特殊线性数据结构,只要具有push_back和pop_front()操作的线性结构,都可以作为queue的底层容器,比如list
但是STL中对stack和queue选择deque作为其底层容器,主要是因为:
(1)stack和queue不需要遍历(stack和queue没有迭代器),只需要在固定的一端或者两端进行操作
(2)在stack中元素增长时,deque比vector的效率高
(3)在queue中的元素增长时,deque不仅效率高,而且内存使用率也高

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值