当前位置 : 主页 > 编程语言 > c语言 >

stack模拟实现

来源:互联网 收集:自由互联 发布时间:2023-08-25
stack模拟实现 我们用适配器模式/配接器模式,本源是转换,把已有的东西进行转换。 设计模式:把常见的设计方法进行总结,适配器也是一种设计模式。 我们用已有的容器封装:可以

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。必须从右往左缺省。如果不从右往左,可能会引起错误。

上一篇:Programming abstractions in C阅读笔记: p114-p117
下一篇:没有了
网友评论