入力エッジのない要素を保持する構造が必要な toposort のバリアントを実装しています。との両方がこの目的に適しているようqueue
にstack
見えます。それらが取り出される順序は重要ではありません。問題は、それらのいずれかが他のものよりも大幅に高速かどうかです。
5 に答える
queue
およびstack
両方ともコンテナー アダプターであり、それ自体で完全なコンテナーではありません。stack
とはどちらも デフォルトqueue
で の上に実装されておりstd::deque
、この設定を変更しなければ同様のパフォーマンスが得られるはずです。
それは、コーディングしているアプリケーションの種類に大きく依存し、最も必要な操作に役立つ基礎となるコンテナーを選択できます。
主な質問への回答: わかりません。std::deque
for (スタックとキューの両方のデフォルトの内部コンテナー) の場合、push_back と push_front (および pop_back と pop_front) は対称であるため、それらのいずれも大幅に高速であるとは思いません。どれも速くなるはずがありません。ただし、プレーンな古い std::vector をpush_back
and 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