首页 > 其他分享 >stack模拟实现

stack模拟实现

时间:2023-08-16 21:02:19浏览次数:39  
标签:return 实现 st push include stack 模拟 con

stack模拟实现

我们用适配器模式/配接器模式,本源是转换,把已有的东西进行转换。

设计模式:把常见的设计方法进行总结,适配器也是一种设计模式。

我们用已有的容器封装:可以这样定义类模板template<class T,class Container>,Container就是符合我们要求的一个容器。

我们可以将头文件写在.cpp文件中然后再包含,可以不在自定义头文件中写。

image-20230417092311188

#pragma once
namespace Niu {
	template<class T,class Container>
	class stack {
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();
		}
		const T& top()
		{
			return _con.back();//不能用[],不是所有容器都有[]
		}
		bool size()
		{
			return _con.size();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		//vector<int> v;
		Container _con;
	};
	void test_stack()
	{
		stack<int, vector<int>> st;
		st.push(1);
		st.push(2);
		st.push(3);
		st.push(4);
		st.push(5);
		while (!st.empty())
		{
			cout << st.top() << " ";
			st.pop();
		}
		cout << endl;
	}
}

测试文件:

#include <stack>
#include <iostream>
#include <vector>
using namespace std;
#include "stack.h"
int main()
{
	Niu::test_stack();
	return 0;
}

我们也可以使用链式栈,直接定义:

stack<int, list<int>> st

模板参数的名字可以随便取。

我们也可以给模板参数一个缺省值,只不过给的是类型:template<class T,class Container = vector<int>>给了缺省值之后我们就可以这样写stack<int> st。必须从右往左缺省。如果不从右往左,可能会引起错误。

标签:return,实现,st,push,include,stack,模拟,con
From: https://blog.51cto.com/u_15562309/7113289

相关文章

  • 七月学习之Firewalld实现NAT
    6、Firewalld实现NAT6.1、DNAT应用场景基本概念:端口转发是指传统的目标地址映射,实现外网访问内网资源实现原理:firewalld使用的是代理方式来实现地址映射,会占用随机端口实现语法:firewall-cmd--permanent--zone=<区域>--add-forward-port=port=<源端口号>:proto=<协议>:toport=......
  • 8.16 模拟赛小结
    前言最____的一集题目是从正睿OI捞过来的找不到原题T1文件改名\(n\leq10^5\)题意简要:有一堆文件要改名保证初始的和改正后的名字都没重复且更改过程中不予许出现重复求最小操作步数思考:这题推一下就行若是状态转移把这个东西丢到图上发现可以直接跳过\(s_i=t_i......
  • 模拟集成电路设计系列博客——1.1.3 Cascode电流镜
    1.1.3Cascode电流镜Cascode电流镜是一种高输出阻抗电流镜,其基本结构如下图所示:首先从\(Q_2\)漏极看进去的输出阻抗仅为\(r_{ds2}\),其分析和基本电流镜非常一样。因此可以认为\(Q_4\)是一个带有\(r_{ds2}\)的源极退化电阻的电流源,利用之前的\((1.1.10)\)公式,可以得到:\[r_{out}......
  • (随笔)e.printStackTrace()和throw new RuntimeException(e)区别
    e.printStackTrace()和thrownewRuntimeException(e)都是处理异常的方式,但它们有一些区别。e.printStackTrace():这是一个用于打印异常信息的方法。它将异常的完整堆栈跟踪输出到标准错误流(通常是控制台)。它将输出异常的类型、出现异常的位置以及其他相关的异常信息。e.print......
  • Trino418版本动态加载catalog不需要重启集群修改思路及实现
        熟悉Trino的同学应该都知道Trino新增、删除catalog都需要重启集群,这个生产环境里如果需要频繁增加数据源的场景是非常不友好的操作。  网上关于动态加载Catalog的方案有一些,但是在Trino比较新的版本里面已经无法适用。 目前官方关于这个功能一直都没有完成,详细......
  • 模拟实现一个简单的string类
    string类为何要被做成模板首先要了解一下为什么string类,要被做成模板如下图:string我们知道是用来储存字符串的,对于英文使用asc2码即可以代表所有的英文符号,但是string这个类为何要被做成模板呢?这就要涉及到编码的问题了,首先我们知道对于一个整型(浮点型)而言,计算机是通过记录它的补码......
  • 微信开发之一键修改好友备注的技术实现
    简要描述:修改好友备注请求URL:http://域名地址/modifyRemark请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识wcId是string好友微信idremark是string好友......
  • RPA+智能问答实现微信端智能客服
    背景:由于业务发展迅速,服务的商家越来越多,目前我们售后团队都是通过企业微信群和客户进行沟通,平时客户的相关问题也是在企业微信中来讨论解决;但是我们售后团队资源有限,而且有的问题客户会重复问,周末或者晚上售后同学回复不及时影响体验;最重要的一点商家客服习惯于在微信端进行咨......
  • 猜数字游戏(仅限十次)c语言实现
    #include<stdlib.h>//srand的头文件#include<time.h>//time的头文件voidgame(){ inti=0; intguess=0;//定义用户输入的数字 intret=0;//定义ret变量用来存放随机生成的数字 ret=rand()%100+1;//通过rand函数来生成随机数,由于rand函数生成随机数的范围是0-32......
  • 微信开发之一键修改好友备注的技术实现
    简要描述:修改好友备注请求URL:http://域名地址/modifyRemark请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识wcId是string好友微信idremark是string好友备注返回数据:参数名类型说明codestring1000......