STL stack应用

1. 概念 
stack是一种LIFO(last-in first-out)的数据结构,其只允许在容器的尾部对数据进行操作,如下: 


stack定义如下: 
Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from the end of the container. 
stacks are implemented as containers adaptors, which are classes that use an encapsulated object of a specific container class as its underlying container, providing a specific set of member functions to access its elements.
Elements are pushed/popped from the "back" of the specific container, which is known as the top of the stack.

2. API 
stack提供的API接口比较简单,如下: 
(constructor)    Construct stack (public member function) 
empty    Test whether container is empty (public member function) 
size    Return size (public member function) 
top    Access next element (public member function) 
push    Add element (public member function) 
pop    Remove element (public member function)

3. stack实现 
stack是容器适配器,其通过对某种既有容器进行包装,从而提供LIFO的数据访问方法。不同的库,对stack有不同的实现,可以为deque,或者list,也可以为其他实现。 
例如,SGI SQL就是通过deque实现stack,主要代码如下: 

[c-sharp] view
plain
copy

  1. template <class T, class Sequence = deque<T> >  
  2. class stack {  
  3. Sequence c; // 底层容器  
  4. public:  
  5. // 通过调用deque的方法完成 stack 的操作。  
  6. bool empty() const { return c.empty(); }  
  7. size_type size() const { return c.size(); }  
  8. reference top() { return c.back(); }  
  9. const_reference top() const { return c.back(); }  
  10. void push(const value_type& x) { c.push_back(x); }  
  11. void pop() { c.pop_back(); }  
  12. };  

4. 迭代器 
stack所有元素的进出都必须符合LIFO的条件,只有stack顶端的元素,才能被访问,所以,stack不提供迭代器。

5. stack使用示例 
代码如下: 

[c-sharp] view plaincopy

  1. #include <iostream>  
  2. #include <stack>  
  3. using namespace std;  
  4.   
  5. int main ()  
  6. {  
  7.   stack<int> myints;  
  8.   cout << "0. size: " << (int) myints.size() << endl;  
  9.   
  10.   for (int i=0; i<5; i++) myints.push(i);  
  11.   cout << "1. size: " << (int) myints.size() << endl;  
  12.   
  13.   myints.pop();  
  14.   cout << "2. size: " << (int) myints.size() << endl;  
  15.   
  16.   return 0;  
  17. }  

输出结果:

0. size: 0

1. size: 5

2. size: 4

6. 结语 
Stack是一个容器适配器,通过包装既有容器,从而为程序员提供了堆栈的全部功能。 

参考文献: 
STL源码剖析 

时间: 2025-01-02 08:03:09

STL stack应用的相关文章

C++ STL

C++ STL 基础 C++的类.请读下面一段代码: class Shape { private: int x_pos; int y_pos; int color; public: Shape() : x_pos(0), y_pos(0), color(1) {} Shape(int x, int y, int c = 1) : x_pos(x), y_pos(y), color(c) {} Shape(const Shape& s) : x_pos(s.x_pos), y_pos(s.y_po

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点: 1 #include <iostream> 2 using namespace std; 3 4 typedef struct Node{ 5 int data;//数据域 6 Node *next;//指针域 7 } Node, *List; 8 9 //在单链表的末位添加一个结点 10 void addNode(List *head, int value) 11 { 12 //

STL之stack

一.stack(栈) 栈:LIFO 后进先出: 首先要指出的是,stack并非和STL的其他类模板是独立的容器,stack是自适应容器(容器适配器) stack<int, deque<int>>  s; stack<int, vector<int>>       s; stack<int, list<int>>           s; STL中实现的stack方法: s,empty(); s.size(); s.pop(); //弹

C++ STL容器stack和queue详解_C 语言

stack是一个比较简单的容器,它的使用也很简单,stack是LIFO容器,就是后进先出,最后添加进去的元素,第一个取出来 stack初始化 std::stack<int> first; std::stack<int> second(first); std::stack<int, std;:vector<int>> third; //使用vector初始化stack ### stack常用方法### empty();//判断是否为空 push(Elem e)

STL之stack,queue,优先队列

 1.stack,size(),empty(),pop()函数 #include<stack> #include <iostream>   using namespace std;   //通过push()方法入栈 //通过size()方法求栈中元素的个数 //通过empty()方法判断栈是否为空 //通过pop()求栈中最顶端的元素 void main() {     int num;     cin >> num;     stack<int> my

UVa 120 Stacks of Flapjacks (STL deque&amp;amp;reverse)

120 - Stacks of Flapjacks Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=56 Background Stacks and Queues are often considered the bread and butter of dat

STL学习系列之四:STL学习小结

提供了类型安全.高效而易用特性的STL无疑是最值得C++程序员骄傲的部分.每一个C++程序员都应该好好学习STL:). STL(Standard Template Library 标准模板库)是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的:一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,一个原因了,C++中已经有了模板.在后来,STL又被添加进了C++库.1996年,惠普公司又免费公开了STL,为

C++ STL简介

一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比

C++ STL编程轻松入门

  作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情. 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL科学领域里所常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性.这种现象有些类似于Microsoft Visual