1. ホーム
  2. c++

std::vector: prefer assign or std::copy のコピー?

2023-11-13 03:57:46

質問

2つのベクトルがあります。

std::vector<int> v1, v2;

// Filling v1
...

そして、今度は v1v2 . を好む理由はあるのでしょうか?

v2 = v1;

std::copy (v1.begin(), v1.end(), v2.begin());

(またはその逆)ですか?

どのように解決するのですか?

一般に、私は強く v2 = v1 :

  1. より短く、より明確に意図を伝えることができる
  2. std::copy が動作しない場合 v2 と同じ長さでない場合 v1 (と同じ長さでなければなりません (リサイズされないので、古い要素の一部を保持することになります)。 v2.size() > v1.size() で、プログラムの他の場所で使用されているいくつかのランダムなデータを上書きします。 最悪の場合
  3. もし v1 が期限切れになりそうな場合(そしてC++11を使用している場合)、それを簡単に修正することができます。 move という内容に変更できます。
  4. パフォーマンス的には、割り当てが std::copy というのは、実装者はおそらく std::copy を内部的に使用するでしょうから。

結論として std::copy は表現力が乏しく、間違ったことをする可能性があり、さらに速くもありません。ですから、ここでそれを使う理由は本当にありません。