【C++ STL】細數C++ STL 的那些事 -- stack(棧)__C++

來源:互聯網
上載者:User

           1)Stack是一種關聯容器,是通過簡單地修飾線性類deque的介面而獲得的另一種“容器類”,往往被歸結為配接器(adapter)而不是容器(container)。

                 stack不能遍曆,所以沒有迭代器。。。

                 底層容器除了 deque外還可採用 list。

                  

            2)使用

                    需載入的標頭檔:   #include<stack>
                                                using namespace std;

                   template <class T, class Container = deque<T> >


            3)主要的方法有如下:     

                          empty() 堆棧為空白則返回真                     pop() 移除棧頂元素(不會返回棧頂元素的值)                      push() 在棧頂增加元素                     size() 返回棧中元素數目                     top() 返回棧頂元素


              4)例子:

#include <iostream>#include <stack>using namespace std;int main(){stack <int> myStack;//定義棧myStack.push(5);//壓棧myStack.push(6);myStack.push(7);myStack.pop(); //出棧cout<<myStack.top()<<endl;cout<<myStack.size()<<endl;cout<<myStack.empty()<<endl;return 0;}
讀檔案例子

#include <iostream>#include <fstream>#include <string>#include <cstdlib>#include <stack>using namespace std;int main(){ifstream inf;inf.open("temp.txt");if (!inf) {cerr<<"cannot open file for input!"<<endl;return EXIT_FAILURE;}stack <string> s;string line;while (getline(inf,line)){//讀入一行文本s.push(line); //壓入棧}inf.close();while (!s.empty()){//棧不空,輸出棧頂元素cout<<s.top()<<endl;s.pop();//彈棧}return 0;}


             5)stack的實現

#include <deque>#include <stdexcept>#include <iostream>using namespace std;template <typename T>class stack{private:deque<T> elems; //實際容器public:void push(T const&);void pop(void);T top() const;bool empty() const{return elems.empty();}template<typename T2> //類成員模板stack <T>& operator= (stack<T2> const&);//實現迭代器。typedef const T* const_iterator;T* end(void);T* begin(void);};template <typename T>template <typename T2>stack<T>& stack<T>::operator =(const stack<T2> &op2){if((void*)this == (void*)&op2)return *this;stack<T2> tmp(op2);elems.clear();while(!tmp.empty()){elems.push_front(tmp.top());tmp.pop();}return *this;}template <typename T>void stack<T>::push(T const& elem){elems.push_back(elem);}template <typename T>void stack<T>::pop(){if(elems.empty())throw out_of_range("stack<>::pop() :empty stack");elems.pop_back();}//實現迭代器。template <typename T>T stack<T>::top() const{if(elems.empty())throw out_of_range("stack<>::top() :empty stack");return elems.back();}//指向第一個元素。template <typename T>T* stack<T>::begin(){return (&(elems.front()));}//這裡要實現的是指向未端的下一元素。template <typename T>T* stack<T>::end(){return ((&(elems.back()))+1);}int main(){stack<int> intStack;stack<int> charStack;intStack.push(10);intStack.push(19);intStack.push(39);    cout<<"top:"<<intStack.top()<<endl;cout<<"賦值並輸出:"<<endl;charStack = intStack;stack<int>::const_iterator iterator;iterator = charStack.begin();while(iterator != charStack.end()){cout<< *iterator<<endl;++iterator;}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.