Если векторы одного типа, используйте конструкцию копирования или назначение копирования:
vec2(vec1);
vec2 = vec1;
Если векторы не совпадают (может быть, другой распределитель или что-то, или vec1 является deque), то вам действительно нужен конструктор на основе диапазона или присвоение на основе диапазона:
vec2(vec1.begin(), vec1.end()); // range-based constructor
vec2.assign(vec1.begin(), vec1.end()); // range-based assignment
Если вы настаиваете на этом с std::copy
, правильный метод:
copy(vec1.begin(), vec1.end(), back_inserter(vec2));
Поскольку резервирование пространства не делает его назначаемым. copy
работает, присваивая каждому элементу его новое значение. Так что vec2.size()
должно быть не меньше, чем vec1.size()
в вашем случае. Вызов reserve
на самом деле не меняет размер вектора, а только его емкость.
В книге Effective STL Скотт Мейерс утверждает, что почти все случаи использования std :: copy для вставки должны быть заменены функциями-членами на основе диапазона. Я предлагаю вам взять копию, это отличный справочник!