目录
stack类的作用
stack是stl库提供的一种容器适配器,也就是我们数据结构中学到的栈,是非常常用的数据结构,特点是遵循LIFO(last in first out,也就是后进先出)原则。
什么是容器适配器
stl中提供的类很多都叫容器,但有一些叫做容器适配器,容器适配器到底是啥呢?我们不妨先抛掉容器这两个字,先来谈谈适配器,适配器是软件设计之中的一种概念,即基于原有的接口设计适配出用户想要的接口,是一种设计模式,适配器这种设计模式提升了代码复用性以及系统扩展性,降低了代码的耦合度,是一种优秀的设计模式。那么对于容器适配器来说,就是利用已有的容器进行各种操作封装出新的类,这就叫容器适配器。
stack的接口
构造函数
cpp
explicit stack (const container_type& ctnr = container_type());
一般来说不用给参数,直接调用默认构造就行。
empty
cpp
bool empty() const;
栈的判空。
size
cpp
size_type size() const;
返回栈的元素数。
top
cpp
value_type& top();
const value_type& top() const;
返回栈顶元素。
push
cpp
void push (const value_type& val);
入栈。
pop
cpp
void pop();
出栈。
swap
cpp
void swap (stack& x) noexcept(/*see below*/);
栈自己的交换函数。
关系运算符重载
cpp
template <class T, class Container>
bool operator== (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>
bool operator!= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>
bool operator< (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>
bool operator<= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>
bool operator> (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>
bool operator>= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
stack类的实现
cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<deque>
using namespace std;
namespace jiunian
{
template<class T, class container = deque<T>>
class stack
{
public:
typedef stack<T, container> Self;
//stack()
//{
//}
//stack(Self& x):
// con(x.con)
//{
//}
//~stack()
//{
//}
bool empty()const
{
return con.empty();
}
size_t size()const
{
return con.size();
}
T& top()
{
return con.back();
}
const T& top() const
{
return con.back();
}
void push(const T& val)
{
con.push_back(val);
}
void pop()
{
con.pop_back();
}
void swap(Self& x)
{
con.swap(x.con);
}
Self operator=(Self x)
{
con = x.con;
return *this;
}
private:
container con;
};
}
stack作为一个容器适配器,实现起来相比其他容器明显简单了不少,因为其作为容器适配器只需要对其他容器的接口进行封装就行,不需要自己造轮子。实现过程一看就懂,不做过多赘述。