理解C++ STL棧實現的3個示例程序

      網友投稿 875 2022-05-29

      什么是棧?

      在我們的日常生活中,我們可能會看到一堆物品。例如:一疊盤子、疊在盤子上的煎餅、河內塔問題的棍子上的石頭、一疊椅子、一疊書等。

      在編程語言中,堆棧是一種沒有什么有趣屬性的數據結構。它的元素在您獲得它們時添加,并且您從添加到其中的最后一個元素清空堆棧。

      Stack 也稱為 LIFO,代表“后進先出”。

      所以,第一個添加的元素最后出來,最后一個添加的成員先出來。該結構在軟件開發或軟件相關主題以及硬件實現中可能經常出現的一些典型編程情況下是良好的。

      堆棧實現策略

      對于堆棧,有幾種可能的實現方式,最常用的分類是基于堆棧的預測大小,我們正在使用。以下是堆棧的三種最常見的實現策略:

      * 第一個,稱為有限大小的堆棧,通常使用數組和計數器來實現,該計數器知道您添加了多少元素,您還需要知道容量。

      * 第二個更有趣,它是通過結構體和指針實現的。它有時被稱為“未知大小”的堆棧。第一個和第二個選項都可以在 C 和 C++ 編程語言中使用。

      * 第三種可能的解決方案是創建自己的類或模板類,使用很少的方法和重載運算符、友元方法等……

      也可以有對象堆棧和指向對象的指針。但是,我們文章的重點將放在 STL 堆棧上。

      如何使用 STL 堆棧?

      為了使用 STL 堆棧,首先您需要在代碼的開頭添加“#include stack”。

      這將使您能夠在程序中使用堆棧。更準確地說,它是STL容器,它是用其他一些STL數據結構實現的,這使它成為一個適配器。

      在此之后,您需要聲明某種類型的堆棧,可以這樣完成:

      堆棧名稱OfOurStack;

      聲明堆棧后,您可以應用幾個成員函數。

      如果您需要檢查堆棧是否為空,您可以使用空成員函數,根據堆棧的狀態返回 true 或 false。要使用它,你可以這樣寫:

      nameOfOurStack.empty();

      當您需要確定堆棧的大小時,您可以創建計數器,如果您添加元素,您會增加計數器,或者如果您從堆棧中刪除元素,您會減少您的計數器。這應該通過大小來完成,即公共成員函數就在那里。這如下所示:

      nameOfOurStack.size();

      現在獲得的元素已經添加到堆棧中,可以根據您的需要在您的程序中使用。

      要訪問我們的堆棧頂部,您將使用 top,它將從我們的堆棧頂部復制元素,但是它不會像您在開始時期望的那樣從容器中刪除它們。

      nameOfOurStack.top();

      如果您想從堆棧頂部刪除元素,您可以使用 pop.

      nameOfOurStack.pop();

      為創建堆棧而煩惱:從用戶那里獲取元素,從文件中讀取它們或者計算它們。要在堆棧頂部再添加一個元素,您可以像這樣編碼:

      nameOfOurStack.push(someElement);

      理解C++ STL棧實現的3個示例程序

      在 C++ 11 中,你也應該有 emplace。它將構造元素并將其添加到堆棧中。例如,您可以執行以下操作:

      nameOfOurStack.emplace("Some string that will be added to stack of strings");

      如果您想交換兩個堆棧,從 C++ 11 開始,您也應該交換。

      如果您嘗試比較兩個堆棧,您可能還需要一些非常有用的關系運算符。

      STL 堆棧示例程序 #1

      我們的第一個示例將說明如何創建少量整數的堆棧以及如何對其執行一些基本操作。

      #include #include using namespace std; int main() { stack nStack; cout<<"NOW YOU HAVE STACK !!!"<

      STL 堆棧示例程序 #2

      我們的第二個例子將解釋如何創建字符串堆棧。

      #include #include #include using namespace std; int main() { stack sStack; for(;;) { char cPick; cout<<"Would you like to add new string y/n->"; cin>>cPick; if(cPick=='n') break; cout<<"Next string plase->"; string sTemp; cin>>sTemp; sStack.emplace(sTemp); cout<

      STL 堆棧示例程序 #3

      第三個也是最后一個示例將向您展示如何將十進制數轉換為其等效的二進制數。

      #include #include typedef unsigned long long int myType; using namespace std; int main() { cout<<"WE WILL CONVERT NUMBER INTO BINARY EQUIVALENT"< //PREPARE SPACE FOR NUMBER WE INPUT myType temp; cout<<"Please, input the number->"; cin>>temp; //LET'S DECLARE STACK stack nBinaryNumber; //FIND BINARY CIPHERS while(temp) { int nCipher = temp%2; nBinaryNumber.emplace(nCipher); temp/=2; } //PRESENT THE STACK while(!nBinaryNumber.empty()) { (nBinaryNumber.top()==1)?cout<<'1':cout<<'0'; nBinaryNumber.pop(); } return EXIT_SUCCESS; }

      C 語言 C++ 數據結構 匯編語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:搭建ClickHouse集群
      下一篇:機器人編程趣味實踐15-遙控到自動(AutoAvoidObstacles)
      相關文章
      久久精品国产亚洲香蕉| 中文字幕专区在线亚洲| 亚洲乱码无码永久不卡在线| 亚洲 无码 在线 专区| 亚洲暴爽av人人爽日日碰| 亚洲综合一区无码精品| 亚洲性色AV日韩在线观看| 亚洲中文字幕日本无线码| 亚洲人配人种jizz| 亚洲精品日韩专区silk| 亚洲福利电影在线观看| 亚洲明星合成图综合区在线| 亚洲精彩视频在线观看| 亚洲成人福利在线| 亚洲福利秒拍一区二区| 亚洲免费视频网址| 亚洲videos| 亚洲欧美日韩国产精品一区| 亚洲精品无码久久久久秋霞| 亚洲av无码专区在线电影天堂| 亚洲hairy多毛pics大全| 亚洲熟妇无码AV| 亚洲大码熟女在线观看| 在线观看亚洲电影| 亚洲乱亚洲乱少妇无码| 亚洲一区AV无码少妇电影☆| 国产国拍亚洲精品mv在线观看 | 精品亚洲一区二区| 亚洲av中文无码乱人伦在线播放| 久久亚洲国产视频| 亚洲综合激情另类小说区| 亚洲国产午夜精品理论片| 亚洲一级毛片在线播放| 亚洲性无码AV中文字幕| 亚洲av无码国产精品色在线看不卡| 亚洲人成无码网WWW| 亚洲日韩小电影在线观看| 亚洲AV成人片色在线观看高潮| 亚洲精品人成电影网| 日韩亚洲不卡在线视频中文字幕在线观看 | 久久久亚洲欧洲日产国码aⅴ |