stackスタックの一般的な使い方の詳細


1.stackの定義.
stackは先進的なコンテナで、stackを使用するには、まずヘッダファイル#includeを追加し、ヘッダファイルの制限にusing namespace stdを追加する必要があります.
その定義の書き方は、他のSTLコンテナと同様に、typenameは任意の基本データ型またはコンテナであってもよい
stack< typename > name;

2.stackコンテナ内の要素へのアクセス
stackは先進的なデータ構造であるため、STLのstackではtop()のみでスタックトップ要素にアクセスできます.
#include 
#include
using namespace std;
int main(void)
{
    stack< int > st;
    for (int i = 0; i <5; i++) {
        st.push(i);
    }
    printf("%d",st.top());
    return 0;
}

3.stack共通関数インスタンス解析
1.push()はxをスタックに入れ、時間複雑度はO(1)である.
2.top()はスタックトップ要素にアクセスし、時間複雑度はO(1)である.
3.pop()はスタックトップ要素をポップアップするために使用され、時間複雑度はO(1)である.
例:
#include
#include 
using namespace std;
int main(void)
{
    stack< int > st;
    for(int i = 0; i < 5 ; i++)
    {
        st.push(i);
    }
    for (int i = 0; i <3 ; ++i) {
        st.pop();//           ,
    }
    printf("%d",st.top());
    return 0;
}

4.empty()は、stack内が空であるか否かを検出する、trueが空であり、falseが非空である、時間的複雑度がO(1)である.
例は次のとおりです.
#include 
#include 
using namespace std;
int main(void)
{
    stack< int > st;
    if(st.empty() == true)
    {
        printf("empty");
    }else
    {
        printf("not empty");
    }
    st.push(1);
    if(st.empty() == false)
    {
        printf("not empty");
    }else
    {
        printf("empty");
    }
    return 0;
}

4.size()はstackの要素数を返し、時間複雑度はO(1)である.
#include 
#include 
using namespace std;
int main(void)
{
    stack< int > st;
    for (int i = 0; i <5 ; ++i) {
        st.push(i);
    }
    printf("%d",st.size());
    return 0;
}

4.Stackの一般的な用途
Stackは、スタックメモリに対するプログラムの制限によるプログラム実行エラーを防止するために、いくつかの再帰的な実装をシミュレートするために使用することができる.一般的に、プログラムのスタックメモリスペースは小さく、いくつかの問題では、通常の関数で再帰すると、再帰層数が深すぎると、プログラムの実行がクラッシュします.スタックを用いて再帰アルゴリズムの実装をシミュレートすれば,この態様の問題は回避できるが,この応用は少ない.