stack和queue的学习与模拟实现

stack & queue

1、学习stack & queue

stack遵循的规则:LIFO(后进先出)。

stack的常用接口非常简单,我们早在"数据结构"专栏中就已经见过了类似的接口。

stack是不支持迭代器的,否则就无法保证严格的后进先出。

queue遵循的规则:FIFO(先进先出)。

queue同样不支持迭代器。

2、模拟实现stack & queue

2.1、模拟实现stack

我们之前在数据结构的学习中,模拟实现stack使用的是数组,那么我们这里模拟实现stack,是否可以对vector进行封装呢?

确实是可以的。但是有更好的方法:适配器。

我们的手机,通过电源适配器,可以连接充电宝、车载电源、家用电源进行充电。

那么stack,也可以通过适配器(vector、list等数据结构),以实现各种方法。

cpp 复制代码
// stack.h
#include<iostream>
#include<vector>
#include<list>
#include<deque>

using namespace std;

namespace yzc 
{
	template<class T, class Container = deque<T>>
	class stack
	{
	public:

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

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

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

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

		bool empty() { return size() == 0; }

	private:
		Container _con;
	};
}

vector作底层:

list做底层:

2.2、模拟实现queue

queue也可以使用适配器实现:

cpp 复制代码
// queue.h
#include<iostream>
#include<vector>
#include<list>
#include<deque>

using namespace std;

namespace yzc
{
	template<class T, class Container = deque<T>>
	class queue
	{
	public:

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

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

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

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

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

		bool empty() { return size() == 0; }

	private:
		Container _con;
	};
}

deque作底层:

list作底层:

但是vector作底层就不行:

因为vector并没有实现头删方法:

也就意味着,queue对于适配器的选择,是有要求的。

相关推荐
raindayinrain20 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的20 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao20 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
小徐不徐说21 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
大都督会赢的21 小时前
C++第一节课
开发语言·c++
UIU11421 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
TMedical1 天前
MedPlanning 截骨模拟矫形功能
c++·图像处理·人工智能·qt·健康医疗
qq_406981031 天前
共享变量一 关于extern与const
开发语言·c++
chari克里1 天前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt
码匠许师傅1 天前
【C++三方组件】mbedTLS:面向嵌入式的轻量 TLS
开发语言·c++