STL stack 在 C++ 中提供堆棧數據結構的功能。

棧數據結構如下 LIFO (Last In First Out) 原則。 也就是說,最後添加的元素將首先被移除。

堆棧數據結構

要了解有關堆棧的更多信息,請訪問我們的教程 Stack Data Structure.

創造 Stack

為了在 C++ 中創建堆棧,我們首先需要包含 stack 頭文件。

#include <stack>

導入此文件後,我們可以創建 stack 使用以下語法:

stack<type> st;

這裡, type 指示數據類型這個命令這個命令我們要存儲在堆棧中。 例如,

// create a stack of integers
 stack<int> integer_stack; 
// create a stack of strings
stack<string> string_stack;

示例:C++ STL 堆棧

#include <iostream>

#include <stack>

using namespace std;

int main {
    // create a stack of strings

stack<string> languages;

    
    // add element to the Stack
    languages.push("C++");
    languages.push("Java");
    languages.push("Python");
    
    // print top element
    cout << languages.top;

    return 0;
}

Output

Python

在上面的例子中,我們創建了 stack 命名語言的字符串 .

在這裡,我們使用了 push 將元素添加到堆棧中。 然後我們使用了 top 顯示頂部元素。

我們將了解更多關於 pushtop 稍後在教程中。

堆棧方法

在 C++ 中, stack 類提供了各種方法來對堆棧執行不同的操作。

手術 描述
push 將一個元素添加到堆棧中
pop 從堆棧中移除一個元素
top 返回棧頂元素
size 返回棧中的元素個數
empty 返回 true 如果堆棧為空

將元素添加到堆棧中

我們用 push 將元素添加到堆棧中。 例如,

#include <iostream>

#include <stack>

using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

// 將元素壓入棧中 colors.push(“Red”); colors.push(“Orange”);

  
  cout << "Stack: ";

  // print elements of stack
   while(!colors.empty) {
    cout << colors.top << ", ";
    colors.pop;
  }
 
  return 0;
}

Output

Stack: Orange, Red, 

在上面的示例中,我們創建了一個稱為顏色的字符串堆棧。 然後,我們使用了 push 將元素添加到堆棧中。

colors.push("Red");
colors.push("Orange");

我們沒有直接打印堆棧的內容,而是使用了 while 循環和各種堆棧方法。

while(!colors.empty) {
  cout << colors.top << ", ";
  colors.pop;
}

要打印堆棧的所有元素,我們打印它的 top element 接著 pop(刪除)它在循環內。 這個過程不斷重複,直到堆棧為空。

我們將了解 pop, topempty 在接下來的部分中。

另請注意,我們已按以下順序插入元素: {“Red”, “Orange”}.

但是在打印元素時,我們得到 {“Orange”, “Red”}.

這是因為棧是一個 LIFO 數據結構,這意味著最後插入的元素首先被檢索。

注意:與向量或其他容器不同,我們不能使用範圍 for 循環遍歷堆棧。這是因為 STL 堆棧是一個 STL 容器適配器,它提供了限制性訪問,使其行為類似於標準堆棧數據結構。

從中刪除元素 Stack

我們可以使用從堆棧中刪除一個元素 pop. 例如,

#include <iostream>
#include <stack>
using namespace std;

// function prototype this command this command for display_stack utility
void display_stack(stack<string> st);

int main {

  // create a stack of strings
  stack<string> colors;

  // push elements into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  cout << "Initial Stack: ";
  // print elements of stack
  display_stack(colors);

// 刪除“Blue” 因為它是最後插入的 colors.pop;

  
  cout << "Final Stack: ";

  // print elements of stack
  display_stack(colors);
  
  return 0;
}

// utility function to display stack elements
void display_stack(stack<string> st) {

  while(!st.empty) {
    cout << st.top << ", ";
    st.pop;
  }

  cout << endl;
}

Output

Initial Stack: Blue, Orange, Red, 
Final Stack: Orange, Red,

在上面的例子中,我們使用了 pop 從堆棧中刪除一個元素。

最初,堆棧的內容是 {“Blue”, “Orange”, “Red”}.

然後我們使用了 pop 刪除元素。

// removes top element
colors.pop 

這將刪除頂部的元素 stack 即最後插入的元素,即 “Blue”.

因此,最終堆棧變為 {“Orange”, “Red”}.

訪問元素來自 Stack

我們使用訪問堆棧頂部的元素 top. 例如,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

  // push element into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  // get top element

string top = colors.top;

  cout << "Top Element: " << top;
  
  return 0;
}

Output

Top Element: Blue

在上面的示例中,我們創建了一個名為顏色的字符串堆棧,並添加了以下元素: “Red”, “Orange”“Blue”.

然後我們使用了 top 訪問頂部元素:

string top = colors.top; 

這裡, “Blue” 最後插入,所以它是 top element.

獲取堆棧的大小

我們用 size 獲取元素的數量 stack. 例如,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of int
  stack<int> prime_nums;

  // push elements into the stack
  prime_nums.push(2);
  prime_nums.push(3);
  prime_nums.push(5);

// 獲取棧的大小 int size = prime_nums.size;

  cout << "Size of the stack: " << size;

  return 0;
}

Output

Size of the stack: 3

在上面的示例中,我們創建了一個名為 prime_nums 的整數堆棧,並向其中添加了三個元素。

然後我們使用了 size 查找堆棧中的元素數:

prime_nums.size;

由於我們在堆棧中添加了 3 個元素, prime_nums.size 返回 3.

檢查堆棧是否為空

我們用 empty 檢查堆棧是否為空。 此方法返回:

  • 1(true)– 如果堆棧為空
  • 0(false)– 如果堆棧不為空

例如,

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of double
  stack<double> nums;
  
  cout << "Is the stack empty? ";

// 檢查棧是否為空 if (nums.empty) {

    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }

  cout << "Pushing elements..." << endl;

  // push element into the stack
  nums.push(2.3);
  nums.push(9.7);
 
  cout << "Is the stack empty? ";

// 檢查棧是否為空 if (nums.empty) {

    cout << "Yes";
  }
  else {
    cout << "No";
  }

  return 0;
}

Output

Is the stack empty? Yes
Pushing elements...
Is the stack empty? No

在上面的例子中,我們使用了 empty 確定是否 stack 是空的,

if(nums.empty) { // returns false
  cout << "Yes" << end;;
}
else {
  cout << "No" << endl; 
}

最初,堆棧中沒有元素。 所以 nums.empty 返回 true.

然後我們將元素添加到堆棧中。

同樣,我們使用 nums.empty 判斷棧是否為空。 這一次,它返回 false.

以上是有關信息 如何使用 C++ 堆棧 了解有關堆棧的更多信息 [Detailed Guide]. 如果您有任何問題,請詢問 fixsy.org 在下面的評論中。 我很樂意幫助你。