STL 之 stack


原文地址:http://blog.sina.com.cn/s/blog_4c740ac00100b3mx.html

STL 中类 stack 实现了一个栈

1)push 能够插入元素

2)pop 移除栈顶元素

使用的时候,需要包含头文件 #include <stack>,stack 被声明如下:

namespace std
{
    template <class T, class Container = deque<T> >
    class stack;
}

第一个模板参数表示元素的类型,第二个模板参数表明了实现堆栈所使用的容器,即内部用于存储元素的容器,默认使用 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() 返回栈顶元素,并不会移除这个元素(注意,返回的是栈顶元素的引用),看下面的代码:

    std::stack<int> st;
    st.push(1);
    st.top() = 2;   // 可以方便的修改栈顶元素
    std::cout << st.top() << "\n";   // 输出 2

注意在 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 的......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值