Способы копирования вектора в C ++

Опубликовано: 1 Января, 2022

В случае массивов нет особого выбора для копирования массива в другой, кроме итеративного метода, то есть запуска цикла для копирования каждого элемента по соответствующему индексу. Но классы 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, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++ C