stack(棧)
阿新 • • 發佈:2019-02-19
Stack簡介
stack是堆疊容器,是一種“先進後出”的容器。
stack是簡單地裝飾deque容器而成為另外的一種容器。
#include <stack>
stack物件的預設構造
stack採用模板類實現, stack物件的預設構造形式: stack <T> stkT;
stack <int> stkInt; //一個存放int的stack容器。
stack <float> stkFloat; //一個存放float的stack容器。
stack <string> stkString; //一個存放string的stack容器。
...
demo
stack是堆疊容器,是一種“先進後出”的容器。
stack是簡單地裝飾deque容器而成為另外的一種容器。
#include <stack>
stack物件的預設構造
stack採用模板類實現, stack物件的預設構造形式: stack <T> stkT;
stack <int> stkInt; //一個存放int的stack容器。
stack <float> stkFloat; //一個存放float的stack容器。
stack <string> stkString; //一個存放string的stack容器。
...
//尖括號內還可以設定指標型別或自定義型別。
stack的push()與pop()方法 stack.push(elem); //往棧頭新增元素 stack.pop(); //從棧頭移除第一個元素 stack<int> stkInt; stkInt.push(1);stkInt.push(3);stkInt.pop(); stkInt.push(5);stkInt.push(7); stkInt.push(9);stkInt.pop(); stkInt.pop(); 此時stkInt存放的元素是1,5 stack物件的拷貝構造與賦值 stack(const stack &stk); //拷貝建構函式 stack& operator=(const stack &stk); //過載等號操作符 stack<int> stkIntA; stkIntA.push(1); stkIntA.push(3); stkIntA.push(5); stkIntA.push(7); stkIntA.push(9); stack<int> stkIntB(stkIntA); //拷貝構造 stack<int> stkIntC; stkIntC = stkIntA; //賦值 stack的資料存取 <span style="white-space:pre"> </span>stack.top(); //返回最後一個壓入棧元素 stack<int> stkIntA; stkIntA.push(1); stkIntA.push(3); stkIntA.push(5); stkIntA.push(7); stkIntA.push(9); int iTop = stkIntA.top(); //9 stkIntA.top() = 19; //19 stack的大小 stack.empty(); //判斷堆疊是否為空 stack.size(); //返回堆疊的大小 stack<int> stkIntA; stkIntA.push(1); stkIntA.push(3); stkIntA.push(5); stkIntA.push(7); stkIntA.push(9); if (!stkIntA.empty()) { int iSize = stkIntA.size(); //5 }
demo
#include <iostream> #include <cstdio> #include <stack> #include <algorithm> using namespace std; void stackInit() { stack<int> s; // 入棧 for (int i = 0; i < 10; ++i) { s.push(i + 1); } cout << "size of s: " << s.size() << endl; while (!s.empty()) { cout << s.top() << ' '; // 獲取棧頂元素 s.pop(); // 彈出棧頂元素 } cout << endl; } class Teacher { public: int age; char name[32]; public: void printTeacher() { cout << "age: " << age << endl; } }; void stackClass() { Teacher t1, t2, t3; t1.age = 21; t2.age = 22; t3.age = 23; stack<Teacher> s; s.push(t1); s.push(t2); s.push(t3); while (!s.empty()) { Teacher tmp = s.top(); s.pop(); tmp.printTeacher(); } /* age: 23 age: 22 age: 21 */ cout << endl; } void stackClassP() { Teacher t1, t2, t3; t1.age = 21; t2.age = 22; t3.age = 23; stack<Teacher *> s; s.push(&t1); s.push(&t2); s.push(&t3); while (!s.empty()) { Teacher *tmp = s.top(); s.pop(); tmp->printTeacher(); } /* age: 23 age: 22 age: 21 */ } int main() { stackInit(); stackClass(); stackClassP(); return 0; }