<STL系列>,stack和queue详解,掌握STL容器从现在开始

目录

前言

一、stack的介绍和实现

1、容器适配器

 2、stack的介绍

 3、stack的模拟实现

二、queue的介绍和实现

1、queue的介绍

 2、quueue的模拟实现

 三、priopity_queue的介绍和实现

1、priopity_queue的介绍

2、仿函数(函数对象)的介绍

2.1为什么要引入放函数

2.2函数对象的介绍

3、优先级队列的模拟实现

 四、deque的简单介绍

1、deque的原理介绍

2、deque的优点和缺陷

总结


前言

哈喽大家好,今天我们继续来学习STL的容器。本章主要讲解STL中栈和队列的相关知识,小伙伴们快拿好笔记本,让我们一起开始吧。


一、stack的介绍和实现

1、容器适配器

在介绍stack之前,我们首先要学习一个概念——容器适配器。

概念:适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。

 2、stack的介绍

(1) stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。

(2)stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素。

(3)stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:

  • empty:判空操作
  • back:获取尾部元素操作
  • push_back:尾部插入元素操作
  • pop_back:尾部删除元素操作

(4)标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。

 3、stack的模拟实现

	template<class T, class Contioner = std::deque<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
        void pop()
		{
			_con.pop_back();
		}
        T top()
		{
			return _con.top;
		}
        bool empty()
		{
			return _con.empty();
		}
        size_t size()
		{
			return _con.size();
		}
	private:
		Contioner _con;
	};

二、queue的介绍和实现

1、queue的介绍

(1) 队列是一种容器适配器,其中从容器一端插入元素,另一端提取元素。

(2)队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

(3)底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:

  • empty:检测队列是否为空
  • size:返回队列中有效元素的个数
  • front:返回队头元素的引用
  • back:返回队尾元素的引用
  • push_back:在队列尾部入队列
  • pop_front:在队列头部出队列

ÿ

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了一系列容器类,用于存储和管理数据。以下是STL中常用的容器类头文件的介绍: 1. vector(向量):vector是一个动态数组,可以在尾部快速插入和删除元素。它的头文件是<vector>。 2. list(链表):list是一个双向链表,可以在任意位置插入和删除元素。它的头文件是<list>。 3. deque(双端队列):deque是一个双端队列,可以在头部和尾部快速插入和删除元素。它的头文件是<deque>。 4. stack(栈):stack是一个后进先出(LIFO)的容器,只能在栈顶进行插入和删除操作。它的头文件是<stack>。 5. queue(队列):queue是一个先进先出(FIFO)的容器,只能在队尾插入,在队头删除元素。它的头文件是<queue>。 6. priority_queue(优先队列):priority_queue是一个按照优先级排序的队列,可以快速访问最大或最小元素。它的头文件是<queue>。 7. set(集合):set是一个有序且不重复的集合,可以进行插入、删除和查找操作。它的头文件是<set>。 8. map(映射):map是一个键值对的集合,可以根据键进行插入、删除和查找操作。它的头文件是<map>。 9. unordered_set(无序集合):unordered_set是一个无序且不重复的集合,可以进行插入、删除和查找操作。它的头文件是<unordered_set>。 10. unordered_map(无序映射):unordered_map是一个无序的键值对集合,可以根据键进行插入、删除和查找操作。它的头文件是<unordered_map>。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值