C/C++

C++ 程式語言 std::stack 堆疊用法教學與範例

介紹 C++ 標準函式庫所提供的堆疊(stack)功能用法,並提供基本的使用範例。

使用 C++ 堆疊

堆疊(stack)是一種後進先出(LIFO, Last In First Out)的資料結構,在 C++ 中若要使用堆疊,可以運用 C++ 標準函式庫(STL)所提供的 stack,以下是基本的使用範例:

#include <iostream>
#include <stack>  // 引入堆疊>標頭檔
int main() {
  std::stack<int> myStack;  // 建立堆疊

  for (int i = 0; i < 5; ++i) {
    myStack.push(i);  // 放入元素
  }

  // 傳回最上方的元素
  std::cout << "Top: " << myStack.top() << std::endl;

  // 移除最上方的元素
  myStack.pop();

  // 傳回最上方的元素
  std::cout << "Top: " << myStack.top() << std::endl;

  return 0;
}
Top: 4
Top: 3

取得堆疊內元素個數

若要取得堆疊內的元素個數,可以使用 size 函數:

#include <iostream>
#include <stack>
int main() {
  std::stack<int> myStack;
  for (int i = 0; i < 5; ++i) {
    myStack.push(i);
  }

  // 取得堆疊內元素個數
  std::cout << "Count: " << myStack.size() << std::endl;

  return 0;
}
Count: 5

檢查堆疊是否有元素(是否為空)

若要檢查堆疊內是否有任何元素,可以使用 empty 函數:

#include <iostream>
#include <stack>
int main() {
  std::stack<int> myStack;
  for (int i = 0; i < 5; ++i) {
    myStack.push(i);
  }

  // 檢查堆疊是否有元素(是否為空)
  if (myStack.empty()) {
    std::cout << "堆疊是空的。" << std::endl;
  } else {
    std::cout << "堆疊不是空的。" << std::endl;
  }

  return 0;
}
堆疊不是空的。

堆疊內容互換

若要將兩個堆疊的內容互換,可以使用 swap 函數:

#include <iostream>
#include <stack>
int main() {
  std::stack<int> myStack1, myStack2;
  for (int i = 0; i < 5; ++i) { myStack1.push(i); }
  for (int i = 10; i < 13; ++i) { myStack2.push(i); }

  // 將兩個堆疊內容互換
  myStack1.swap(myStack2);

  // 輸出 myStack1
  std::cout << "myStack1 = ";
  while (!myStack1.empty()) {
    std::cout << myStack1.top() << " ";
    myStack1.pop();
  }
  std::cout << std::endl;

  // 輸出 myStack2
  std::cout << "myStack2 = ";
  while (!myStack2.empty()) {
    std::cout << myStack2.top() << " ";
    myStack2.pop();
  }
  std::cout << std::endl;

  return 0;
}
myStack1 = 12 11 10
myStack2 = 4 3 2 1 0

這個範例一開始建立了 myStack1myStack2 兩個堆疊,然後使用 swap 函數將兩個堆疊中的內容互換。

參考資料:Tutorialspoint

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago