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用起来比较方便,不过可以用数组模拟,但会浪费很多内存空间
- STL容器之stack
- STL容器之stack
- C++ STL 之stack
- STL之stack
- STL 之 stack - queue
- STL之stack(栈)
- STL 之 stack
- STL 之 stack
- STL之stack
- STL之stack、queue
- STL 之 stack
- STL之stack
- STL学习之stack
- stl之stack
- stl之stack容器
- C++ STL之stack
- STL之Stack,Queue
- STL之stack
- Java中无法引用没有包、默认包、顶级类
- poj2299--B - Ultra-QuickSort(线段树,离散化)
- 设计模式概述【整理】
- 在centos6中同时使用python2和python3
- gedit下汇编不高亮显示的解决办法
- STL 之 stack
- Libevent源码分析-----配置event_base
- ZOJ2588 Burning Bridges 割边
- Number Sequence(杭电1005)
- hdu 1800 Flying to the Mars(贪心)
- hdoj 2091空心三角形
- Windows XP英文系统显示中文乱码该如何解决
- hd 2154 跳舞毯
- hibernate 双向1对1关系