【C++】手撕 栈 & 队列(适配器)

这篇具有很好参考价值的文章主要介绍了【C++】手撕 栈 & 队列(适配器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,stack

1,stack的介绍

2,stack 框架

3,push(const T& x)

4,pop()

5,top()

6,size()

7,empty()

8,stack 测试

9,源代码

二,queue

1,queue的介绍

2,queue 框架

3,push(const T& x)

4,pop()

5,front()

6,back()

7,size()

8,empty()

9,queue 测试

10,源代码

三,总结


【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构

一,stack

1,stack的介绍

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

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

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

empty:判空操作

back:获取尾部元素操作

push_back:尾部插入元素操作

pop_back:尾部删除元素操作

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

【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构

2,stack 框架

这里我们要用【适配器】

	template<class T,class Container=vector<T>>
	class stack
	{
	public:
	
	private:
		Container _con;
	};

适配器 Container 可以转换成特定的容器;

3,push(const T& x)

尾插

		void push(const T& x)
		{
			_con.push_back(x);
		}

4,pop()

尾删

		void pop()
		{
			_con.pop_back();
		}

5,top()

取栈顶元素

		const T& top()
		{
			return _con.back();
		}

6,size()

堆栈有效数据个数

		size_t size()
		{
			return _con.size();
		}

7,empty()

判空

		bool empty()
		{
			return _con.empty();
		}

8,stack 测试

void test1()
{
	wxd::stack<int> sk1;

	sk1.push(1);
	sk1.push(2);
	sk1.push(3);
	sk1.push(4);

	sk1.pop();
	cout << sk1.top() << " " << sk1.size() << " " << sk1.empty() << " " << endl;
}

【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构

9,源代码

	template<class T,class Container=vector<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_back();
		}

		const T& top()
		{
			return _con.back();
		}

		size_t size()
		{
			return _con.size();
		}

		bool empty()
		{
			return _con.empty();
		}

	private:
		Container _con;
	};

二,queue

1,queue的介绍

1,队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。

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

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

empty:检测队列是否为空

size:返回队列中有效元素的个数

front:返回队头元素的引用

back:返回队尾元素的引用

push_back:在队列尾部入队列

pop_front:在队列头部出队列

4,标准容器类 deque list 满足了这些要求。默认情况下,如果没有为 queue 实例化指定容器类,则使用标准容器 deque

【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构

2,queue 框架

	template<class T, class Container = list<T>>
	class queue
	{
	public:
		
	private:
		Container _con;
	};

适配器 Container 可以转换成特定的容器;

3,push(const T& x)

尾插

		void push(const T& x)
		{
			_con.push_back(x);
		}

4,pop()

头删

		void pop()
		{
			_con.pop_front();
		}

5,front()

返回队列头部的值

		const T& front()
		{
			return _con.front();
		}

6,back()

返回队列尾部的值

		const T& back()
		{
			return _con.back();
		}

7,size()

返回有效数据个数

		size_t size()
		{
			return _con.size();
		}

8,empty()

判空

		bool empty()
		{
			return _con.empty();
		}

9,queue 测试

void test_queue()
{
	wxd::queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);

	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
	cout << endl;

}

【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构

10,源代码

	template<class T, class Container = list<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_front();
		}

		const T& front()
		{
			return _con.front();
		}

		const T& back()
		{
			return _con.back();
		}

		size_t size()
		{
			return _con.size();
		}

		bool empty()
		{
			return _con.empty();
		}

	private:
		Container _con;
	};

三,总结

我们就先搞一个大概的,其中还有很多分支,比如我们写的是擦除某个数据,其实也可以擦除某个范围,这些就靠大家去摸索,查阅文档了;

stack 和 queue 类的实现就到这里了;

加油!

【C++】手撕 栈 & 队列(适配器),C++,c++,开发语言,算法,运维,数据结构文章来源地址https://www.toymoban.com/news/detail-852148.html

到了这里,关于【C++】手撕 栈 & 队列(适配器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【c++】:“无敌的适配器来咯“栈和队列模拟实现以及优先级队列的模拟实现。

        文章目录 前言 一.栈和队列的模拟实现 二.优先级队列 总结   栈的介绍和使用: 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封

    2024年02月01日
    浏览(38)
  • 【C++航海王:追寻罗杰的编程之路】priority_queue(优先队列) | 容器适配器你知道哪些?

    目录 1 - priority_queue的介绍和使用 1.1 - priority_queue的介绍 1.2 - priority_queue的使用 1.3 - priority_queue的模拟实现 2 - 容器适配器 2.1 - 什么是适配器 2.2 - STL标准库中stack和queue的底层结构 2.3 - deque的介绍 2.3.1 - deque的原理介绍 2.3.2 - deque的缺陷 2.4 - 为什么选择deque作为stack和queue的底

    2024年04月10日
    浏览(46)
  • 【C++】STL——容器适配器priority_queue(优先级队列)详解 及 仿函数的介绍和使用

    这篇文章我们接着上一篇的内容,再来学一个STL里的容器适配器—— priority_queue (优先级队列) 1.1 priority_queue的介绍 我们上一篇文章学了 queue (队列),那优先级队列也是在 queue 里面的: 和 queue 一样, priority_queue 也是一个容器适配器,那他和 queue 有什么区别呢?我们一

    2024年02月07日
    浏览(48)
  • 【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )

    在 STL 中 预定义了很多 函数对象 , 如果要 对 函数对象 的 参数 / 返回值 进行 计算 或 设置 , 可以 使用 \\\" 函数适配器 \\\" 实现上述需求 ; \\\" 函数适配器 \\\" 可以 将 已存在的 函数对象 转化为 另一种符合要求的 函数对象 ; \\\" 函数适配器 \\\" 定义在 functional 头文件 中 ; \\\" 函数适配器

    2024年02月02日
    浏览(65)
  • [C++] STL_priority_queue(优先级队列) 的使用及底层的模拟实现,容器适配器,deque的原理介绍

    priority_queue文档介绍 翻译: 1. 优先队列是一种 容器适配器 ,根据严格的弱排序标准, 它的第一个元素总是它所包含的元素中最大的。 2. 此上下文类似于 堆 , 在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。 3. 优先队列被实现为容器适配

    2024年02月04日
    浏览(47)
  • 从C语言到C++_38(C++的IO流+空间适配器)STL六大组件联系

    目录 1. C语言的输入和输出和流 2. C++的IO流 2.1 C++标准IO流 2.2 C++文件IO流 2.3 stringstream(字符流) 3. 空间配置器(了解) 3.1 一级空间适配器 3.2 二级空间配置器 3.3 二级空间适配器的空间申请 3.4 二级空间配置器的空间回收 3.5 对象构造与释放和与容器结合 4. STL六大组件联系

    2024年02月09日
    浏览(41)
  • STL:双端队列&容器适配器&仿函数&优先级队列

    双端队列可以在头部和尾部进行插入删除操作 与vector相比,头插效率高,不需要搬移元素 与list相比,空间利用率高 deque逻辑上空间是连续的,物理上并不是,是由一段段小空间拼接而成的 双端队列的迭代器比较复杂 cur:指向空间中被遍历的那个元素 first:指向空间开始

    2024年02月16日
    浏览(47)
  • 【简化程序设计】C++STL“容器适配器“之栈和队列

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++初阶 🎉代码仓库:小智的代码仓库 【本节目标】: stack的介绍和使用 stack的模拟实现 queue的介绍和使用 queue的模拟实现 priority_queue的介绍和使用 priority_queue的模拟实现 容器适配器 deuqe的介绍

    2024年02月15日
    浏览(34)
  • 适配器模式(C++)

    将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何

    2024年02月14日
    浏览(32)
  • C++适配器模式

    1 简介: 适配器模式是一种结构型设计模式,用于将一个类的接口转换为客户端所期望的另一个接口。适配器模式允许不兼容的类能够协同工作,通过适配器类来实现接口的转换和适配。 2 实现步骤: 以下是使用C++实现适配器模式的步骤: a. 定义目标接口:首先,确定客户

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包