51

重複の可能性:
dequeにvectorを使用することを好むのはなぜですか

なぜそんなにstd::vector人気があるのか​​気になりstd::dequeます。Dequeは、ルックアップでほぼ同じくらい効率的で、挿入(vector :: reservedなし)でより効率的であり、前面での挿入/削除を可能にします。

ハーブサッターはかつて、ベクトルを使用したい場合は、両端キューを優先することを推奨していました(言い換えれば)。ただし、 Writing Modern C ++に関する最近の講演で、彼は再びstd::vectorデフォルトのコンテナとして考えることを強くお勧めします。以前にリンクしたGOTWによると、標準でも同様の表現があります。

この格差の理由はありますか?それvectorはもっと単純でよく知られているだけですか、それとも技術的な理由がありますか?それとも、それvectorはただのクールな名前ですか..?

4

5 に答える 5

14

std::vector非常によく理解されており、シンプルで、Cと互換性があります(メモリレイアウトとイテレータとしてのポインタの使用の両方の点で)。

一部の操作では、よりも効率的ですstd::deque。インデックスによる要素へのアクセスはその一例です。

特定のタスクでは、その仕事をうまく行う最も単純なコンテナーを使用するのが理にかなっています。多くの場合、その最も単純なコンテナはstd::vectorです。

于 2012-12-07T07:14:50.310 に答える
5

最もstd::vector一般的に知られているコンテナ クラスであることに加えて、次のようないくつかの利点がstd::dequeあります。

  • std::dequeの場合とは異なり、典型的なでは要素にアクセスするために追加の間接指定が必要ですstd::vector
  • の場合の反復子はstd::dequeスマート ポインターである必要があり、 の場合のようなポインターではありませんstd::vector
  • の要素はstd::vector連続していることが保証されているため、配列をパラメーターとして受け取る C スタイルの関数と互換性があります。
  • std::deque容量と再割り当ての瞬間を制御するためのサポートを提供しません。

特に最後の点は注目に値する。

于 2012-12-07T07:20:04.340 に答える
5

単純な理由で、人々は std::deque よりも std::vector を使用します。それらは多くのCライブラリとインターフェースし、std::dequeが保証しない(できない)連続ストレージへのポインタを必要とするパラメータを持つ関数を持っています。

もう 1 つの理由は、std::deque に従ってコードをビルドし、連続したアクセスをサポートする必要があるように要件が変更された場合、少しリファクタリングを行う必要があることです。

容量が増えたときの非効率性を克服するために、より効率的なベクトル実装を作成したと著者が主張するライブラリが存在することを言及せざるを得ません。

于 2012-12-07T07:21:16.657 に答える