ACM/ICPC競賽之STL--stack
阿新 • • 發佈:2019-01-02
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;
}