1. ホーム
  2. c++

[解決済み] ベクターのコピーは、予約してコピーするのと、作成してスワップするのと、どちらが効率的でしょうか?[重複しています]。

2022-03-12 10:31:37

質問

ベクターのコピーを効率的に作成しようとしています。2つのアプローチが考えられます。

std::vector<int> copyVecFast1(const std::vector<int>& original)
{
  std::vector<int> newVec;
  newVec.reserve(original.size());
  std::copy(original.begin(), original.end(), std::back_inserter(newVec));
  return newVec;
}

std::vector<int> copyVecFast2(std::vector<int>& original)
{
  std::vector<int> newVec;
  newVec.swap(original);
  return newVec;
}

また、その理由も教えてください。不必要なコピーを避けるために、最も効率的な解決策を探しています。

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

2つ目の例では、引数を参照で送るとうまくいきません。ということですか?

void copyVecFast(vec<int> original) // no reference
{

  vector<int> new_;
  new_.swap(original); 
}

これでもいいのですが、もっと簡単な方法として

vector<int> new_(original);