3

入力エッジのない要素を保持する構造が必要な toposort のバリアントを実装しています。との両方がこの目的に適しているようqueuestack見えます。それらが取り出される順序は重要ではありません。問題は、それらのいずれかが他のものよりも大幅に高速かどうかです。

4

5 に答える 5

2

queueおよびstack両方ともコンテナー アダプターであり、それ自体で完全なコンテナーではありません。stackとはどちらも デフォルトqueue で の上に実装されておりstd::deque、この設定を変更しなければ同様のパフォーマンスが得られるはずです。

それは、コーディングしているアプリケーションの種類に大きく依存し、最も必要な操作に役立つ基礎となるコンテナーを選択できます。

于 2013-03-31T20:03:13.623 に答える
2

主な質問への回答: わかりません。std::dequefor (スタックとキューの両方のデフォルトの内部コンテナー) の場合、push_back と push_front (および pop_back と pop_front) は対称であるため、それらのいずれも大幅に高速であるとは思いません。どれも速くなるはずがありません。ただし、プレーンな古い std::vector をpush_backand pop_back、または同等に使用することをお勧めします

std::stack<T, std::vector<T>>

スタックがデフォルトで deque を使用する理由については、こちらを参照してください。

于 2013-03-31T20:04:29.227 に答える
1

queuestackはパフォーマンスに大きな違いはありませんが、明らかに異なるノード訪問順序を引き起こします。ノードがメモリ内でどのようにレイアウトされているかによって、一方が他方よりもキャッシュに適した順序になる場合があります。

于 2013-03-31T20:07:03.783 に答える
1

どちらも一定の複雑さを持っています...定数のいずれかがより高いかどうかを判断するには、時間を計る必要があります

http://www.cplusplus.com/reference/stack/stack/pop/
http://www.cplusplus.com/reference/queue/queue/pop/
于 2013-03-31T20:02:57.920 に答える
-3

キューとスタックは異なります。最初はFIFO、スタックはFILO

于 2013-03-31T19:59:25.997 に答える