入力エッジのない要素を保持する構造が必要な toposort のバリアントを実装しています。との両方がこの目的に適しているようqueueにstack見えます。それらが取り出される順序は重要ではありません。問題は、それらのいずれかが他のものよりも大幅に高速かどうかです。
5 に答える
queueおよびstack両方ともコンテナー アダプターであり、それ自体で完全なコンテナーではありません。stackとはどちらも デフォルトqueue で の上に実装されておりstd::deque、この設定を変更しなければ同様のパフォーマンスが得られるはずです。
それは、コーディングしているアプリケーションの種類に大きく依存し、最も必要な操作に役立つ基礎となるコンテナーを選択できます。
主な質問への回答: わかりません。std::dequefor (スタックとキューの両方のデフォルトの内部コンテナー) の場合、push_back と push_front (および pop_back と pop_front) は対称であるため、それらのいずれも大幅に高速であるとは思いません。どれも速くなるはずがありません。ただし、プレーンな古い std::vector をpush_backand pop_back、または同等に使用することをお勧めします
std::stack<T, std::vector<T>>
スタックがデフォルトで deque を使用する理由については、こちらを参照してください。
queueとstackはパフォーマンスに大きな違いはありませんが、明らかに異なるノード訪問順序を引き起こします。ノードがメモリ内でどのようにレイアウトされているかによって、一方が他方よりもキャッシュに適した順序になる場合があります。
どちらも一定の複雑さを持っています...定数のいずれかがより高いかどうかを判断するには、時間を計る必要があります
http://www.cplusplus.com/reference/stack/stack/pop/
http://www.cplusplus.com/reference/queue/queue/pop/
キューとスタックは異なります。最初はFIFO、スタックはFILO