STL 之 stack

来源:互联网 发布:哥特萝莉安妮淘宝 编辑:程序博客网 时间:2024/06/05 19:34

STL之stack


栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top()、push()、pop()、 size()、empty() ),很好记的。

头文件 #include <stack>

定义一个栈:
std::stack<int> st;
std::stack<int, std::vector<int> > st2; // 使用 vector 做容器保存元素


这里提及一下 deque,对于 deque,元素被移除的时候,释放内存,而且在重新分配内存(realloc)的时候,不会拷贝元素,这是与 vector 不同的地方

核心接口

栈少不了的三个核心接口:
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 --- 栈的大小
对于栈来说,几乎(不是全部)就是上面介绍的几个函数了


测试代码:

//栈 stack支持 empty() size() top() push() pop()#include <stack>#include <vector>#include <list>#include <cstdio>using namespace std;int main(){//可以使用list或vector作为栈的容器,默认是使用deque的。stack<int, list<int> >   a;stack<int, vector<int> >   b;int i;//压入数据for (i = 0; i < 10; i++){a.push(i);b.push(i);}//栈的大小printf("%d %d\n", a.size(), b.size());//取栈项数据并将数据弹出栈while (!a.empty()){printf("%d ", a.top());a.pop();}putchar('\n');while (!b.empty()){printf("%d ", b.top());b.pop();}putchar('\n');system("pause");return 0;}


体会:C++中的STL的stack用起来比较方便,不过可以用数组模拟,但会浪费很多内存空间
 

0 0
原创粉丝点击