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, 

上記の例では、colors と呼ばれる文字列のスタックを作成しました。 次に、使用しました push 要素をスタックに追加します。

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

スタックの内容を直接出力する代わりに、 while ループとさまざまなスタック メソッド。

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

スタックのすべての要素を印刷するには、その top element その後 pop(削除)ループ内。 このプロセスは、スタックが空になるまで繰り返されます。

について学びます poptopempty 次のセクションで。

また、要素を次の順序で挿入していることにも注意してください。 {“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

上記の例では、colors という文字列のスタックを作成し、次の要素を追加しました。 “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 という整数のスタックを作成し、それに 3 つの要素を追加しました。

次に、使用しました 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 以下のコメントで。 喜んでお手伝いさせていただきます。