[C++]stack使用概要

7656 ワード

stack使用概要
  • スタックとは何ですか?
  • 使用および共通関数
  • 使用にはヘッダファイル
  • を含める必要がある.
  • テンプレートパラメータ
  • スタック初期化
  • 共通関数
  • テクニック
  • スタックとは何ですか.
    1.スタック(stack)はデータ構造であり、一端でしか挿入と削除操作ができない特殊な線形テーブルである.先進的な後出の原則に従ってデータを格納し、先に入ったデータはスタックの底に押し込まれ、最後のデータはスタックの上にあり、データを読む必要があるときにスタックの上からデータがポップアップされる(最後のデータは最初に読み出される).スタックは記憶作用があり、スタックの挿入と削除操作では、スタックベースポインタを変更する必要はありません.スタックは、同じ端で挿入および削除を許可する特殊な線形テーブルです.挿入および削除操作を許可する一端をスタックトップ(top)と呼び、他端をスタックベース(bottom)と呼ぶ.スタックの底は固定され、スタックの頂部は浮動する.スタック内の要素の数がゼロの場合、空のスタックと呼ばれます.挿入は一般にインスタック(PUSH)と呼ばれ、削除はバックスタック(POP)と呼ばれる.スタックは先進後出表とも呼ばれます.2.C++のスタックはコンテナクラスの改編である.コンテナアダプタは、一般的なシーケンスコンテナに基づいていくつかの異なる機能を提供するシーケンスコンテナをカプセル化したクラステンプレートです.アダプタクラスと呼ばれるのは、コンテナの既存のインタフェースに適合することで異なる機能を提供することができるからです.3.スタックは、関数呼び出し時にブレークポイントを格納するために使用することができる.再帰するときはスタックを使う.エディタのundo(取り消し)メカニズムは、スタックで連続的な変化を記録することであり、取り消し操作は最後の操作を取り消すことができ、これもスタックの上部で発生する操作である.コンパイラはスタックを使用して算術式を解析します.
    使用および一般的な関数
    ヘッダファイルを含めるには
    #include 

    c++中スタックはコンテナクラスの改編であるため,独自の構造関数はない.
    テンプレートパラメータ
    stackコンテナアダプタのテンプレートには2つのパラメータがあります.1番目のパラメータは格納オブジェクトのタイプで、2番目のパラメータは下位コンテナのタイプです.stackの下位コンテナはデフォルトでdequeコンテナなので、テンプレートタイプはstackです.2番目のテンプレートタイプパラメータを指定すると、back()、push_をサポートする限り、任意のタイプの下位コンテナを使用できます.back()、pop_back()、empty()、size()の操作.リストを使用するスタックを定義する方法を示します.
    std::stack<std::string,std::list<std::string>> ss;

    スタック初期化
    スタックを作成するときは、初期化リストでオブジェクトで初期化することはできませんが、スタックの下位コンテナタイプがこのコンテナのタイプと同じである限り、別のコンテナで初期化できます.
    std::stack<int> values {1,2,3,4,5};//  ×
    std::list<int> values {1,2,3,4,5};
    std::stack<int,std::list<int>> my_stack (values);//  

    stackテンプレートはコピーコンストラクタを定義ので、既存のstackコンテナをコピーすることができる.
    std::stack<int,std::list<int>>copy_stack {my_stack};

    一般的な関数
    top():T&のタイプのスタックトップ要素の参照を返します.スタックが空の場合、戻り値は定義されません.
    push(const T&obj):オブジェクトコピーをスタックトップに押し込むことができます.これは、最下位コンテナを呼び出すpush_です.back()関数が完了しました.
    Push(T&&obj):オブジェクトを移動するようにスタックの上部にオブジェクトを押し込みます.これは、下位コンテナの右値参照パラメータを呼び出すpush_です.back()関数が完了しました.
    pop():スタックトップ要素をポップアップします.
    size():スタック内の要素の数を返します.
    Empty():スタックに要素がない場合にtrueを返します.
    Emplace():コンストラクション関数を呼び出し、スタックの上部にオブジェクトを生成します.
    swap(stack&other_stack):現在のスタック内の要素とパラメータ内の要素を交換します.パラメータに含まれる要素のタイプは、現在のスタックと同じである必要があります.stackオブジェクトに特例化されたグローバル関数swap()を使用できます.
    テクニック
    スタックはclear()メソッドがないため、スタックを空にするときに1つずつポップアップする必要があり、面倒です.ここでは、スタックを空にする高速方法を提供します.従来の方法:
    void clearStack(stack<elemType> &s){
        while (!s.empty()){
            s.pop();
        }
    }

    迅速な方法:
    oid clearStack(stack<elemType> &s){
        s = stack<elemType>();
        //          ,        
    }
    void clearStack(stack<elemType> &s){
        stack<elemType>().swap(s);
        //swap      s      stack   ,    stack       ,          ,            ,  swap pop  
    }