Быстрый способ скопировать один вектор в другой

Я предпочитаю два способа:

void copyVecFast(const vec<int>& original)
{
  vector<int> newVec;
  newVec.reserve(original.size());
  copy(original.begin(),original.end(),back_inserter(newVec));
}

void copyVecFast(vec<int>& original)
{

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

Как вы это делаете?

Ответ 1

Второй пример не работает, если вы отправляете аргумент по ссылке. Вы имели в виду

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

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

Это сработает, но более простой способ -

vector<int> new_(original);

Ответ 2

Они не то же самое, не так ли? Один - это копия, другой - своп. Следовательно, имена функций.

Мое любимое занятие:

a = b;

Где a и b - векторы.

Ответ 3

Это еще один правильный способ сделать копию вектора, просто используйте его конструктор:

std::vector<int> newvector(oldvector);

Это еще проще, чем использование std::copy для перемещения всего вектора от начала до конца до std::back_insert их в новый вектор.

При этом ваш .swap() не является копией, вместо этого он меняет местами два вектора. Вы бы изменили оригинал, чтобы больше ничего не содержать! Это не копия.

Ответ 4

вам не следует использовать swap для копирования векторов, это изменит "оригинальный" вектор.

передать исходное значение в качестве параметра вместо нового.

Ответ 5

new_vector.assign(old_vector.begin(),old_vector.end()); // Method 1
new_vector = old_vector; // Method 2

Ответ 6

В случае, если вектор УЖЕ существует и вы хотите просто скопировать, вы можете сделать это:

newVec.resize(oldVec.size());
memcpy(&newVec.at(0), &oldVec.at(0), oldVec.size());