C++模拟实现stack

C++模拟实现stack

🌟🌟hello,各位读者大大们你们好呀🌟🌟

🚀🚀系列专栏:【C++的学习】

📝📝本篇内容:stack的基本概念;stack的基本结构;size()成员函数;empty()成员函数;push()成员函数;pop()成员函数;top()成员函数;完整代码

⬆⬆⬆⬆上一篇:一文速通stack和queue的理解与使用

💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.stack的基本概念

stack是一个容器适配器,它底层是修改其他容器的接口,形成另一种风貌。stack就是我们常说的数据结构栈,它具有先进后出的特性,我们只能对它的一端进行操作,并且stack不允许遍历

2.stack基本结构

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <iostream>
#include <deque>
using namespace std;
namespace lnb
{
//既然是模拟实现,我们默认的Container也可以是vector或list,可以更好的理解,deque是库中默认的
	template<class T, class Container = deque<T>>
	class stack
	{
	public:



	private:
		//修改其他容器的接口,形成另一种风貌:容器适配器
		Container _con;
	};
}

可以先去看一下vector和list的模拟实现,这样就可以很好的理解后面的内容了

3.size()成员函数

cpp 复制代码
		//有效元素个数
		size_t size()
		{
			return _con.size();
		}

直接使用底层容器的接口

4.empty()成员函数

cpp 复制代码
//判空
		bool empty()
		{
			return _con.empty();
		}

5.push()成员函数

cpp 复制代码
		//压栈
		void push(const T& val)
		{
			_con.push_back(val);
		}

6.pop()成员函数

cpp 复制代码
		//出栈
		void pop()
		{
			_con.pop_back();
		}

7.top()成员函数

cpp 复制代码
		//获取栈顶元素
		T& top()
		{
			return _con.back();
		}
		
		//针对const对象
		const T& top()const
		{
			return _con.back();
		}

8.完整代码

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <iostream>
#include <deque>
using namespace std;
namespace lnb
{
//既然是模拟实现,我们默认的Container也可以是vector或list,可以更好的理解,deque是库中默认的
	template<class T, class Container = deque<T>>
	class stack
	{
	public:
		//有效元素个数
		size_t size()
		{
			return _con.size();
		}
		
		//判空
		bool empty()
		{
			return _con.empty();
		}

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

		//出栈
		void pop()
		{
			_con.pop_back();
		}


		//获取栈顶元素
		T& top()
		{
			return _con.back();
		}
		
		//针对const对象
		const T& top()const
		{
			return _con.back();
		}

	private:
		//修改其他容器的接口,形成另一种风貌:容器适配器
		Container _con;
	};
}

其实stack的模拟实现很简单,只需要调用别的容器的接口即可,压根没有难度~
🌸🌸C++模拟实现stack的知识大概就讲到这里啦,博主后续会继续更新更多C++的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关推荐
艾莉丝努力练剑26 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
武子康1 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
还债大湿兄2 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
椰椰椰耶3 小时前
【Spring】拦截器详解
java·后端·spring
brzhang4 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构
倔强青铜34 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
u_topian5 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上5 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
xingshanchang6 小时前
Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
开发语言·matlab