stack概述
stack是一种先进后出的数据结构。只有一个出口,stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端外,没有任何其他方法可以存取stack的其他元素。也就是stack不允许遍历行为。
将元素推入stack的操作称为push,将元素推出stack的操作称为pop。
stack定义完整列表
stack其实是将某种容器作为底部结构,将其接口改变,使其符合“先进后出”的特性,形成一个stack。deque是双向开口的数据结构,若以deque为底部结构并封闭其头端开口,就可以轻易形成一个stack了。
由于stack是以底部容器完成其所有共偶,而具有这种“修改某物接口,形成另一种风貌”的性质,我们成为适配器,adapter。
stack没有迭代器
stack所有元素的进出都必须符合“先进后出”的条件,只有stack顶端的元素,才有机会会被外界取用,stack不提供走访功能,也不提供迭代器。
//
// Created by Administrator on 2020/4/3.
//
#ifndef MYTINYSTLNEW_STACK_H
#define MYTINYSTLNEW_STACK_H
#include "Deque.h"
namespace TinySTL{
template<typename T,typename Sequence = TinySTL::deque<T>>
class stack{
private:
Sequence c;//成员只有一个底部容器
public:
typedef typename Sequence::value_type value_type;
typedef typename Sequence::difference_type difference_type;
typedef typename Sequence::size_type size_type;
typedef typename Sequence::reference reference;
typedef typename Sequence::const_reference const_reference;
public:
void push(const value_type& x){c.push_back(x);}
void pop(){c.pop_back();}
reference top(){return c.back();}
//单纯的返回值变成const是不能重载的
//要把函数变成const才可以重载
const_reference top()const{return c.back();}
size_type size(){return c.size();}
bool empty(){return c.empty();}
public:
friend bool operator==(const stack<T,Sequence>& x,const stack<T,Sequence>& y);
friend bool operator<(const stack<T,Sequence>& x,const stack<T,Sequence>& y);
};
template<typename T,typename Sequence>
bool operator==(const stack<T,Sequence>& x,const stack<T,Sequence>& y){
return x.c == y.c;
}
template<typename T,typename Sequence>
bool operator<(const stack<T,Sequence>& x,const stack<T,Sequence>& y){
return x.c < y.c;
}
}
#endif //MYTINYSTLNEW_STACK_H