STL配接器(容器适配器)—— stack 的介绍使用以及模拟实现。

注意 : 以下所有文档都来源此网站 : http://cplusplus.com/

一、stack 的介绍和使用

stack 文档的介绍:https://cplusplus.com/reference/stack/stack/

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

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

3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
        ① push_back:尾部插入元素操作
        ② pop_back:尾部删除元素操作
        ③ back:获取尾部元素操作
        ④ empty:判空操作

4. 标准容器 vector deque list 均符合这些需求,默认情况下,如果没有为 stack 指定特定的底层容器,默认情况下使用deque
                                

二、stack 接口的介绍

函数说明接口说明
构造空的栈
检测stack是否为空
返回stack中元素的个数
返回栈顶元素的引用
将元素val压入stack中
将stack中尾部的元素弹出

三、stack 的模拟实现

从栈的接口中可以看出,栈实际是一种特殊的vector,因此使用vector完全可以模拟实现stack。

  下面就来模拟实现一下 stack,还是与以往一样建两个文件

        一个负责测试所模拟实现的接口文件(Test.cpp),一个负责实现接口的文件(stack.hpp)

       1.下面是负责实现接口的文件 list.hpp 文件的代码:

#pragma once
#include <iostream>
#include <deque>
#include <vector>
#include <list>

using namespace std;

namespace HK
{
	// Ĭdeque Ҳʾ
	template <class T, class container = deque<T>>
	class stack
	{
	public:
		stack()
		{}

		void push(const T& x)
		{
			this->_con.push_back(x);
		}

		void pop()
		{
			this->_con.pop_back();
		}

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

		const T& top() const
		{
			return this->_con.back();
		}

		bool empty() const
		{
			return this->_con.empty();
		}

		size_t size() const
		{
			return this->_con.size();
		}

	private:
        // std::vector<T> _c;
		container _con;
	};
}

    2. 下面是负责测试所模拟实现的接口 Test.cpp文件的代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include "stack.hpp"

void Test_stack()
{
	//HK::stack<int> s;
	//HK::stack<int, vector<int>> s;
	HK::stack<int, list<int>> s;
	s.push(1);
	s.push(2);
	s.push(3);
	s.push(4);
	s.push(5);

	while (!s.empty())
	{
		cout << s.top() << " ";
		s.pop();
	}
	cout << endl;
}

int main()
{
	Test_stack();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值