原文地址:http://blog.sina.com.cn/s/blog_4c740ac00100b3mx.html
STL 中类 stack 实现了一个栈
1)push 能够插入元素
2)pop 移除栈顶元素
使用的时候,需要包含头文件 #include <stack>,stack 被声明如下:
namespace std
{
}
第一个模板参数表示元素的类型,第二个模板参数表明了实现堆栈所使用的容器,即内部用于存储元素的容器,默认使用 deque,你可以使用任何的顺序容器,甚至于自己提供的顺序容器,只要含有 back(), push_back(), pop_back() 方法即可
定义一个栈:
std::stack<int> st;
std::stack<int, std::vector<int> > st2; // 使用 vector 做容器保存元素
这里提及一下 deque,对于 deque,元素被移除的时候,释放内存,而且在重新分配内存(realloc)的时候,不会拷贝元素,这是与 vector 不同的地方
1. 核心接口
栈少不了的三个核心接口:
1)void push() 插入元素到栈顶
2)void pop() 移除栈顶元素(注意,函数类型为 void)
3)value_type& top() 返回栈顶元素,并不会移除这个元素(注意,返回的是栈顶元素的引用),看下面的代码:
注意在 STL 中,在栈为空时,top 和 pop 是未定义的,对于检查栈的大小,可以使用 empty 函数或者 size 函数
empty --- 如果栈为空,返回 true,否则返回 false
size --- 栈的大小
对于栈来说,几乎(不是全部)就是上面介绍的几个函数了
2. 类型
1)std::stack::value_type 元素的类型,等同于实现栈的顺序容器的类型,例如默认情况下,std::stack::value_type 等同于 std::deque::value_type
2)std::stack::size_type 无符号的整数类型,用于定义 stack 的大小
3)std::stack::container_type 容器类型
3. 函数补充
构造函数:
explicit stack::stack(const Container& cont);
比较操作符:
包括 ==, <=, >=, !=, <, >
两个栈相等的含义是,栈中元素数目,以及对应位置的元素相等
BTW,Windows 中,VC2003下,我们可以看到 stack 的实现,发现数据成员是 public 的......