4

私は、すべての stl コンテナーがスワップ アルゴリズムの特殊化を提供して、コピー コンストラクターと、既定のメソッドが使用する 2 つの代入操作の呼び出しを回避することを読みました。ただし、作業中のコードでキューを使用すると便利だと思ったとき、(ベクターやデキューとは異なり) キューがこのメソッドを提供していないことに気付きました。キューの代わりに両端キューを使用することに決めましたが、それでもその理由を知りたいですか?

4

2 に答える 2

3

C ++ 0xは、std::queueなどのコンテナアダプタにスワップを追加します。私はそれが現在の標準から欠落している理由を推測することしかできませんでした。このディスカッションでは、誰かが回避策を提案します。

標準では、継承と呼ばれる必要な部分が保護されるため、解決策があります。[stdアダプターを介して破棄しないでください]目的のアダプターを継承するテンプレート構造体を作成し、コンストラクターのみを提供し、引数をアダプタークラスに転送します。必要なアイテムは標準の保護されたメンバーであるため、スワップメンバーの記述は簡単です。アダプター。

于 2009-06-02T01:56:13.343 に答える
1

彼らは見落としとして取り残されたと確信しています。公平を期すために、私はstd::queueとstd::stackをかなり使用しており、2つを交換する必要はありませんでした。キューの代わりにdequeを使用しても問題ないと思います。のようなものtypedef std::deque<MyType> QueueTypeは、コンテナがどのように使用されるべきかについての十分なヒントを与えるはずです。

于 2009-06-02T02:03:29.990 に答える