Способы копирования вектора в C ++
В случае массивов нет особого выбора для копирования массива в другой, кроме итеративного метода, то есть запуска цикла для копирования каждого элемента по соответствующему индексу. Но классы Vector имеют более одного метода для более простого копирования всего вектора в другой. В основном существует два типа копирования:
Метод 1: Итерационный метод.
Этот метод является общим методом копирования, в этом методе используется цикл для push_back () старых векторных элементов в новый вектор. Они глубоко копируются.
// C++ code to demonstrate copy of vector// by iterative method.#include<iostream>#include<vector>using namespace std; int main(){ // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector vector< int > vect2; // A loop to copy elements of // old vector into new vector // by Iterative method for ( int i=0; i<vect1.size(); i++) vect2.push_back(vect1[i]); cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0;} |
Выход:
Старые векторные элементы: 1 2 3 4 Новые векторные элементы: 1 2 3 4 Первый элемент старого вектора: 2 Первый элемент нового вектора: 1
В приведенном выше коде изменение значения в одном векторе не привело к изменению значения в другом векторе, поэтому они не распределяются по одному и тому же адресу, следовательно, глубокая копия.
Способ 2: Путем присвоения оператора «=».
Простое присвоение нового вектора старому копирует вектор. В случае массивов такой способ присваивания невозможен.
// C++ code to demonstrate copy of vector// by iterative method.#include<iostream>#include<vector>using namespace std; int main(){ // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector vector< int > vect2; // Using assignment operator to copy one // vector to other vect2 = vect1; cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0;} |
Выход:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is : 2 The first element of new vector is : 1
Метод 3. Передавая вектор как конструктор. Во время объявления вектора, передавая старый инициализированный вектор, копирует элементы переданного вектора во вновь объявленный вектор. Они глубоко скопированы.
// C++ code to demonstrate copy of vector// by constructor method.#include<bits/stdc++.h>using namespace std; int main(){ // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector and copying // element of old vector // constructor method, Deep copy vector< int > vect2(vect1); cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0;} |
Выход:
Старые векторные элементы: 1 2 3 4 Новые векторные элементы: 1 2 3 4 Первый элемент старого вектора: 2 Первый элемент нового вектора: 1
Метод 4: с использованием встроенных функций
- copy (first_iterator_o, last_iterator_o, back_inserter ()) : - это еще один способ скопировать старый вектор в новый. Эта функция принимает 3 аргумента: первый - первый итератор старого вектора, второй - последний итератор старого вектора, а третий - функция back_inserter для вставки значений сзади. Это также
сгенерировал глубокую копию.// C++ code to demonstrate copy of vector// by assign() and copy().#include<iostream>#include<vector> // for vector#include<algorithm> // for copy() and assign()#include<iterator> // for back_inserterusingnamespacestd;intmain(){// Initializing vector with valuesvector<int> vect1{1, 2, 3, 4};// Declaring new vectorvector<int> vect2;// Copying vector by copy functioncopy(vect1.begin(), vect1.end(), back_inserter(vect2));cout <<"Old vector elements are : ";for(inti=0; i<vect1.size(); i++)cout << vect1[i] <<" ";cout << endl;cout <<"New vector elements are : ";for(inti=0; i<vect2.size(); i++)cout << vect2[i] <<" ";cout<< endl;// Changing value of vector to show that a new// copy is created.vect1[0] = 2;cout <<"The first element of old vector is :";cout << vect1[0] << endl;cout <<"The first element of new vector is :";cout << vect2[0] <<endl;return0;}Выход :
Старые векторные элементы: 1 2 3 4 Новые векторные элементы: 1 2 3 4 Первый элемент старого вектора: 2 Первый элемент нового вектора: 1
- assign (first_iterator_o, last_iterator_o) : - Этот метод присваивает новому вектору те же значения, что и старый. Это принимает 2 аргумента: первый итератор для старого вектора и последний итератор для старого вектора. Это создает глубокую копию.
// C++ code to demonstrate copy of vector// by assign()#include<iostream>#include<vector> // for vector#include<algorithm> // for copy() and assign()#include<iterator> // for back_inserterusingnamespacestd;intmain(){// Initializing vector with valuesvector<int> vect1{1, 2, 3, 4};// Declaring another vectorvector<int> vect2;// Copying vector by assign functionvect2.assign(vect1.begin(), vect1.end());cout <<"Old vector elements are : ";for(inti=0; i<vect1.size(); i++)cout << vect1[i] <<" ";cout << endl;cout <<"New vector elements are : ";for(inti=0; i<vect2.size(); i++)cout << vect2[i] <<" ";cout<< endl;// Changing value of vector to show that a new// copy is created.vect1[0] = 2;cout <<"The first element of old vector is :";cout << vect1[0] << endl;cout <<"The first element of new vector is :";cout << vect2[0] <<endl;return0;}Выход:
Старые векторные элементы: 1 2 3 4 Новые векторные элементы: 1 2 3 4 Первый элемент старого вектора: 2 Первый элемент нового вектора: 1
Автором этой статьи является Манджит Сингх. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью метода влиятельности. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.