【C++ 】stack 和 queue

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

【C++ 】stack 和 queue,c++

1. 标准库中的stack

stack 的介绍:

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

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

3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类

a. stack 的使用

【C++ 】stack 和 queue,c++

注意:

如果要访问所有元素得到栈顶元素,再pop,直到为空

2. stack的模拟实现

代码

namespace lhy
{ 
	template<class T,class container = vector<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_t.push_back(x);
		}
		void pop()
		{
			_t.pop_back();
		}
		size_t size()
		{
			return _t.size();
		}
		bool empty()
		{
			return _t.empty();
		}
		const T& top()
		{
			return _t.back();
		}
	private:container _t;
	};

【C++ 】stack 和 queue,c++

//用法很像缺省参数,不过这里缺省的是类型

3. 标准库中的queue

queue 的介绍:

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

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

3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类

a. queue 的使用

【C++ 】stack 和 queue,c++

4. queue的模拟实现

代码

namespace lhy
{ 
	template<class T,class container = list<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_v.push_back(x);
		}
		void pop()
		{
			_v.pop_front();
		}
		bool empty()
		{
			return _v.size() == 0;
		}
		const T& back()
		{
			return _v.back();
		}
		const T& front()
		{
			return _v.front();
		}
		size_t size()
		{
			return _v.size();
		}

	private:
		container _v;
	};

5. priority_queue (优先级队列)

优先级队列的介绍:

优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构

因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue

注意:

默认情况下priority_queue是大堆

a. priority_queue 的使用

  • priority_queue() (无参构造函数)
  • priority_queue(InputIterator first, InputIterator last)
  • empty() (判空)
  • push() (尾插)
  • pop () (删除栈顶元素,即第一个元素)
  • top() (返回栈顶元素)

6. priority_queue 的模拟实现

代码

namespace lhy
{

	template<class T>
	struct less
	{
		bool operator()(const T& x, const T& y)
		{
			return x > y;
		}
	};
	template<class T>
	struct greater
	{
		bool operator()(const T& x, const T& y)
		{
			return x < y;
		}
	};
	template<class T, class container = vector<T>, class compare = less<T>>
	class priority_queue
	{
	private:
		container con;
		void AdjustUp(int child)
		{
			int parent = (child - 1) / 2;
			while (child > 0)
			{
				if (compare()(con[parent], con[child]))
				{
					std::swap(con[parent], con[child]);
				}
				else
				{
					break;
				}
				child = parent;
				parent = (child - 1) / 2;
			}
		}
		void AdjustDown(int parent)
		{
			int child = parent * 2 + 1;
			while (child < size())
			{
				if (child + 1 < size() && con[child] > con[child + 1])
				{
					child++;
				}
				if (compare()(con[parent], con[child]))
				{
					std::swap(con[parent], con[child]);
				}
				else
				{
					break;
				}
				parent = child;
				child = parent * 2 + 1;
			}
        }
	public:
			size_t size()
			{
				return con.size();
			}
			void push(const T & x)
			{
				con.push_back(x);
				AdjustUp(size() - 1);
			}
			void pop()
			{
				swap(con[0], con[size() - 1]);
				con.pop_back();
				AdjustDown(0);
			}
			bool empty()
			{
				return con.empty();
			}
			const T& top()
			{
				return con[0];
			}

		};
}

代码注意事项

【C++ 】stack 和 queue,c++

这两个类实际上又可以说成伪函数,这里通过比较大小判断建大堆还是小堆

用法如下:

【C++ 】stack 和 queue,c++

compare()是匿名对象,后面接着是调用 less 类 或者 greater 类的运算符重载()文章来源地址https://www.toymoban.com/news/detail-852349.html

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

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

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

相关文章

  • [ C++ ] STL---stack与queue

    目录 stack简介 stack的常用接口 queue简介 queue的常用接口 stack的模拟实现 queue的模拟实现 1. stack是具有后进先出操作的一种容器适配器 ,其只能从容器的一端进行元素的插入与删除操作 ; 2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并

    2024年03月28日
    浏览(42)
  • C++ STL--->stack和queue

    stack文档 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。 stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为

    2024年01月16日
    浏览(46)
  • 【C++】stack、queue模拟实现+仿函数

    铁汁们,今天给大家分享一篇stack、queue模拟实现+仿函数,来吧,开造⛳️ stack是容器适配器,专门用于进行”先进后出”操作的环境中,只能在容器的一端进行数据的插入和删除操作,元素在特定容器的尾部(即栈顶)被压入和弹出。 容器适配器是将特定的类进行封装,将其

    2024年03月19日
    浏览(40)
  • C++的stack和queue+优先队列

    适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 stack和queue都是容器适配器,底层都是通过去适配双端队列deque去实现的,STL中没有把stack和queue划分在容

    2024年02月13日
    浏览(34)
  • [C++随笔录] stack && queue模拟实现

    🗨️stack的容器适配器应该选什么比较好呢? 首先, stack的特点是 头部入, 尾部出 ⇒ 尾插 和 尾删操作比较频繁 我们前面学过的容器有 vector 和 list, vector 和 list的尾插 和 尾删的时间复杂度是 O(1) , 还是适合做容器适配器的. stack的基本结构 用这个容器对象来进行模拟实现stac

    2024年02月06日
    浏览(43)
  • 【C++】stack与queue的模拟实现

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》 《数据结构》 《蓝桥杯试题》 《LeetCode刷题笔记》 《实训项目》 《C++》 《Linux》《算法》 🌝 每一个不曾起舞的日子,都是对生命的辜负 stack与queue的实现比较简单,本篇不会有太大的篇幅,但值得我们学习的是『 适配器

    2024年01月24日
    浏览(44)
  • C++:Stack和Queue的模拟实现

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

    2024年03月12日
    浏览(43)
  • 【C++杂货铺】详解 stack 和 queue

            欢迎收看本期【C++杂货铺】,本期内容将讲解C++STL中stack和queue的内容,其中包含了stack , queue,priority_queue是什么,怎么使用以及模拟实现这些容器。         此外,还将将讲解设计模式中的适配器模式,以及STL中stack,queue的底层deque。         stack是一种容器适配

    2024年04月12日
    浏览(29)
  • 【c++】STL之stack和queue详解

    作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 目标:掌握stack和queue库,了解deque库 毒鸡汤:小时候,哭是我们解决问题的绝招,长大后,笑是我们面对现实的武器。 望小伙伴们点赞👍收藏✨加关注哟💕💕  今天

    2024年02月19日
    浏览(41)
  • 【C++初阶】12. Stack(栈)和Queue(队列)

    栈的介绍 队列的介绍 拓展:如何从中缀变为后缀 设计模式目前分为26种,这里就只介绍两种 适配器模式 迭代器模式 在日常生活中,我们常见的适配器通常为电源适配器(充电器) – 电源电压为220v,但是我们的设备并不需要这么高的电压(起保护作用) 需要将电源电压适配到我

    2024年02月12日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包