38

私は次のことをしたいと思います:

std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();

値2をh保持するなど。私の方法を試すと、「本来あるべきように無効な値が無視されません」というメッセージが表示されます。

.pop()これはメソッドの意図ではありませんか?これを行うための好ましい方法は何ですか?

4

4 に答える 4

51

標準ライブラリ コンテナーは、 and を分離top()pop()top()最上位の要素への参照を返し、最上位の要素をpop()削除します。back()(そして/などについても同様ですpop_back())。

この分離には十分な理由があり、最上位の要素pop削除して返さないようにします。C++ の基本原則の 1 つは、必要のないものにはお金を払わないということです。単一の関数では、要素を値で返すしかありませんが、これは望ましくない場合があります。懸念事項を分離することで、ユーザーはデータ構造の使用方法について最も柔軟に対応できます。(元の STL ドキュメント の注 #3 を参照してください。)

(興味深いことに、並行コンテナーの場合、 - のpopような関数は、実際にはアトミックにトップ値を削除して返すように強制されることに気付くかもしれません。並行コンテキストでは、「トップにいる」という概念がないためです (または「これは、並列データ構造が保証を提供するためにパフォーマンスに重大な影響を与える方法の明白な例の 1 つです。)

于 2012-08-30T22:17:11.283 に答える
6

以下を使用できます。

h = s.top();

その後、使用します(最新の値を削除する場合は、それ以外の場合は何もしません)

 s.pop();

それは同じように動作します!!

于 2013-03-19T13:19:42.050 に答える