1. 程式人生 > >C++ STL stack實現(棧)

C++ STL stack實現(棧)

       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)例子:

[html] view plain
copy print?
  1. #include <iostream>
  2. #include <stack>
  3. using namespace std;  
  4. int main()  
  5. {  
  6.     stack <int> myStack;//定義棧  
  7.     myStack.push(5);//壓棧  
  8.     myStack.push(6);  
  9.     myStack.push(7);  
  10.     myStack.pop(); //出棧  
  11.     cout<<myStack.top()<<endl;  
  12.     cout<<myStack.size()
    <<endl;  
  13.     cout<<myStack.empty()<<endl;  
  14.     return 0;  
  15. }  
#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;
}
讀檔案例子 [html] view plain copy print?
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <stack>
  6. using namespace std;  
  7. int main(){  
  8.     ifstream inf;  
  9.     inf.open("temp.txt");  
  10.     if (!inf) {  
  11.         cerr<<"cannot open file for input!"<<endl;  
  12.         return EXIT_FAILURE;    }  
  13.     stack <string> s;  
  14.     string line;  
  15.     while (getline(inf,line)){//讀入一行文字  
  16.         s.push(line); //壓入棧 }  
  17.     inf.close();  
  18.     while (!s.empty()){//棧不空,輸出棧頂元素  
  19.         cout<<s.top()<<endl;  
  20.         s.pop();    //彈棧}  
  21.     return 0;  
  22. }  
#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的實現

[html] view plain copy print?
  1. #include <deque>
  2. #include <stdexcept>
  3. #include <iostream>
  4. using namespace std;  
  5. template <typename T>
  6. class stack  
  7. {  
  8. private:  
  9.     deque<T> elems; //實際容器  
  10. public:  
  11.     void push(T const&);  
  12.     void pop(void);  
  13.     T top() const;  
  14.     bool empty() const  
  15.     {  
  16.         return elems.empty();  
  17.     }  
  18.     template<typename T2> //類成員模板  
  19.     stack <T>operator= (stack<T2> const&);  
  20.     //實現迭代器。  
  21.     typedef const T* const_iterator;  
  22.     T* end(void);  
  23.     T* begin(void);  
  24. };  
  25. template <typename T>
  26. template <typename T2>
  27. stack<T>& stack<T>::operator =(const stack<T2> &op2)  
  28. {  
  29.     if((void*)this == (void*)&op2)  
  30.         return *this;  
  31.     stack<T2> tmp(op2);  
  32.     elems.clear();  
  33.     while(!tmp.empty())  
  34.     {  
  35.         elems.push_front(tmp.top());  
  36.         tmp.pop();  
  37.     }  
  38.     return *this;  
  39. }  
  40. template <typename T>
  41. void stack<T>::push(T const& elem)  
  42. {  
  43.     elems.push_back(elem);  
  44. }  
  45. template <typename T>
  46. void stack<T>::pop()  
  47. {  
  48.     if(elems.empty())  
  49.     throw out_of_range("stack<>::pop() :empty stack");  
  50.         elems.pop_back();  
  51. }  
  52. //實現迭代器。  
  53. template <typename T>
  54. T stack<T>::top() const  
  55. {  
  56.     if(elems.empty())  
  57.         throw out_of_range("stack<>::top() :empty stack");  
  58.     return elems.back();  
  59. }  
  60. //指向第一個元素。  
  61. template <typename T>
  62. T* stack<T>::begin()  
  63. {  
  64.     return (&(elems.front()));  
  65. }  
  66. //這裡要實現的是指向未端的下一元素。  
  67. template <typename T>
  68. T* stack<T>::end()  
  69. {  
  70.     return ((&(elems.back()))+1);  
  71. }  
  72. int main()  
  73. {  
  74.     stack<int> intStack;  
  75.     stack<int> charStack;  
  76.     intStack.push(10);  
  77.     intStack.push(19);  
  78.     intStack.push(39);  
  79.     cout<<"top:"<<intStack.top()<<endl;  
  80.     cout<<"賦值並輸出:"<<endl;  
  81.     charStack = intStack;  
  82.     stack<int>::const_iterator iterator;  
  83.     iterator = charStack.begin();  
  84.     while(iterator != charStack.end())  
  85.     {  
  86.         cout<< *iterator<<endl;  
  87.         ++iterator;  
  88.     }  
  89. }  

相關推薦

C++ STL stack實現

       1)Stack是一種關聯容器,是通過簡單地修飾線性類deque的介面而獲得的另一種“容器類”,往往被歸結為配接器(adapter)而不是容器(container)。                  stack不能遍歷,所以沒有迭代器!!!        

聰明的學生C語言實現

不寫初中高階這種實驗啦 直接上STL吧 /如果有不懂的話可以看看STL容器,我直接給個百度百科的連結吧https://baike.baidu.com/item/STL/70103?fr=aladdin/ 聰明的學生(實驗名稱) 一、實驗目的 掌握遞迴思想,將“聰明的學生”問題抽象出遞

關於stack容器

stack容器基本概念 stack建構函式 stack賦值操作 stack資料存取操作 stack大小操作 stack容器基本

c++STL map用法

此文章源於博主(sunshinewave),轉到自己部落格以後方便檢視 map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料處理能力,由於這個特性,它完成有可能在我們處理一對一

C++ STL中佇列queue的使用方法

原文地址 基本操作: push(x) 將x壓入佇列的末端 pop() 彈出佇列的第一個元素(隊頂元素),注意此函式並不返回任何值 front() 返回第一個元素(隊頂元素) back() 返回最後被壓入的元素(隊尾元素) empty() 當佇列為空時,返回true

C++ STL快速入門

在數月之前的機試中第一次體驗到STL的威力,因為自己本來一直在用C語言做開發,很多資料結構都是自己造的,比如連結串列、佇列等,第一次接觸C++ STL後發現這些資料結構都已經給我提供好了,我直接拿去呼叫就好了,真是超級方便。最近的專案中也遇到了STL一些容器,所以現在

C++STL模板容器

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

C#一行程式碼實現01最小化到通知區域

# C#一行程式碼實現系列原創分享 ## 目錄 **初步計劃完成以下內容** 1. 視窗程式 1. 最小化到通知區域 1. [設定開機啟動](https://www.cnblogs.com/easynetwork/p/13867682.html) 1. [關閉視窗前

C++ STL】細數C++ STL 的那些事 -- stack

           1)Stack是一種關聯容器,是通過簡單地修飾線性類deque的介面而獲得的另一種“容器類”,往往被歸結為配接器(adapter)而不是容器(container)。                  stack不能遍歷,所以沒有迭代器!!!      

資料結構實現:連結串列C++版

資料結構實現(六):連結串列棧(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入棧操作 2.2 出棧操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析 3.1

資料結構實現:陣列C++版

資料結構實現(二):陣列棧(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入棧操作 2.2 出棧操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析 3.1 入棧

C++之STL中sort函式的內部實現

另外一個版本: 概述 先進行introsort,基本有序後再使用insertion sort。introsort是改進的quick sort,為了防止最壞情況發生,它使用__lg()函式控制分割惡化的情況。 intro sort演算法 元素個數

STLstack

棧的操作如下: 1. stack<data_type>name;//如:stack<int>z;定義一個數據型別為data_type的棧name。 2. stack<

0x00資料結構——C語言實現+字尾表示式計算

0x00資料結構——C語言實現(棧) 棧的實現 /* 棧(tack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫做棧的頂(top)。 對棧的基本操作有Push(進棧)和Pop(出棧)。 Functions: (在連結串列中增加

C++實現任意表達式求值

今天花了大概四個小時時間,用棧(stack)實現了“任意表達式的值計算”的問題。 C++ 比 C 好的一點就是,C++ 的STL定義了大量的資料型別和演算法,相比於 C 更加視覺化。 實現這個的基本思路很簡單:分成兩部分完成。兩個主要函式: string shorten(

c++ stl stackFILO,容器配接器

1.stack   stack是一種先進後出的資料結構,它只有一個出口。stack允許新增元素、移除元素、取得最頂元素。但除了最頂端外,沒有任何其他方法可以存取stack的其他元素。換言之,stack

第34課 的概念及實現

操作符 cap ons 順序存儲 異常安全 city const text cte 1. 棧的概念 (1)棧是一種特殊的線性表 (2)棧僅能在線性表的一端進行操作   ①棧頂(Top):允許操作的一端   ②棧底(Bottom):不允許操作的一端 (3)棧的特性——後進先出

在STM32上實現NTFS之4:GPT分區表的C語言實現1:主GPT表頭的實現

center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M

在STM32上實現NTFS之5:GPT分區表的C語言實現2GPT實現以及統一方式讀取磁盤分區

tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了   上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實

bp神經網絡模型推導與c語言實現轉載

思路 包括 表示 現在 clas 兩個 通過 val c++ 轉載出處:http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html BP 神經網絡中的 BP 為 Back Propagation