1. 程式人生 > >ACM/ICPC競賽之STL--stack

ACM/ICPC競賽之STL--stack

ACM模版

stack(棧)和queue(佇列)是在程式設計中經常會用到的資料容器,STL為我們提供了方便的stack(棧)和queue(佇列)的實現。

準確的說,STL中的stack和queue不同於vector、list等容器,而是對這些容器進行了重新的包裝。這裡我們不去深入討論STL的stack和queue的實現細節,而是來了解一些他們的基本使用。

stack

stack模版類的定義在<stack>標頭檔案中。
stack模版類需要兩個模版引數,一個是元素型別,另一個是容器型別,但是隻有元素型別是必要的,在不指定容器型別時,預設容器的型別為deque。

定義stack物件的示例程式碼如下:

stack<int> s;
stack<string> ss;

stack的基本操作有:

s.push(x);  //  入棧
s.pop();    //  出棧
s.top();    //  訪問棧頂
s.empty();  //  當棧空時,返回true
s.size();   //  訪問棧中元素個數

Example:

/*
 * 1064--Parencoding(吉林大學OJ)
 * string和stack實現
 */
#include <iostream>
#include <string>
#include <stack>
using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { int m; cin >> m; string str; int leftpa = 0; for (int j = 0; j < m; j++) { int p; cin >> p; for
(int k = 0; k < p - leftpa; k++) { str += '('; } str += ')'; leftpa = p; } stack<int> s; for (string::iterator it = str.begin(); it != str.end(); it++) { if (*it == '(') { s.push(1); } else { int p = s.top(); s.pop(); cout << p << " "; if (!s.empty()) { s.top() += p; } } cout << '\n'; } } return 0; }