C++ STL stack實現(棧)
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- #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()
- cout<<myStack.empty()<<endl;
- return 0;
- }
#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?
- #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;
- }
#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?- #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;
- }
- }
相關推薦
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演算法 元素個數
STL之stack(棧)
棧的操作如下: 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 stack(FILO,容器配接器)
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語言實現(2)GPT實現以及統一方式讀取磁盤分區
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