Способы копирования вектора в 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_inserter
using
namespace
std;
int
main()
{
// Initializing vector with values
vector<
int
> vect1{1, 2, 3, 4};
// Declaring new vector
vector<
int
> vect2;
// Copying vector by copy function
copy(vect1.begin(), vect1.end(), back_inserter(vect2));
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
- 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_inserter
using
namespace
std;
int
main()
{
// Initializing vector with values
vector<
int
> vect1{1, 2, 3, 4};
// Declaring another vector
vector<
int
> vect2;
// Copying vector by assign function
vect2.assign(vect1.begin(), vect1.end());
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
Автором этой статьи является Манджит Сингх. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью метода влиятельности. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.