Быстрый способ скопировать один вектор в другой
Я предпочитаю два способа:
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());