次のことを行いたいのですが。
_std::stack <int> s;
int h = 0;
s.Push(2);
h = s.pop();
_
たとえば、h
に値2を保持させるなどです。自分のメソッドを試してみると、「void valueは無視されるべきではないので無視されません」というメッセージが表示されます。
これは.pop()
メソッドの意図ではありませんか?これを行うための好ましい方法は何ですか?
標準ライブラリコンテナはtop()
とpop()
を分離します。top()
は最上位要素への参照を返し、pop()
は最上位要素を削除します。 (そしてback()
/pop_back()
などについても同様です)。
この分離には十分な理由があり、pop
で最上位の要素を削除せずに戻さないでください。C++の基本原則の1つは、お金を払わないことです。あなたが必要としないもの。単一の関数では、要素を値で返す以外に選択肢がありませんが、これは望ましくない場合があります。懸念事項を分離することで、ユーザーはデータ構造の使い方に最も柔軟性をもたらします。 ( 元のSTLドキュメント の注3を参照してください。)
(奇妙なことに、concurrentコンテナの場合、pop
のような関数が実際にはforced最上位の値をアトミックに削除して返すため。同時コンテキストでは、「最上位」(または「空」である)などの概念はありません。これは、同時データ構造の明らかな例の1つです。保証を提供するために、パフォーマンスに大きな影響を与えます。)
以下を使用できます。
h = s.top();
その後、使用した後(最新の値を削除したい場合は、何もしないでください)
s.pop();
同じように動作します!!
実際にs.top()
を使用して要素を格納し、それを使用して要素をポップすることができます
_s.pop().
_
使用する
_int h=s.top();
s.pop()
_
の代わりに
_int h=s.pop()
_
s.pop()
はスタックから要素を削除して何も返さないため、s.pop()
を一部のデータ型に直接割り当てることはできません。