Векторы — это последовательные контейнеры, которые представляют собой массивы переменного размера. Векторы, как и массивы, используют непрерывные области хранения для своих элементов, что означает, что к ним можно получить доступ, используя диапазоны обычных указателей на их элементы так же, как и массивы. Однако, в отличие от массивов, их размер изменяется динамически, а хранилище обрабатывается контейнером автоматически.
В ситуации с массивами единственный способ скопировать один массив в другой — это использовать итеративный подход, который включает выполнение цикла и копирование каждого элемента по его соответствующему индексу. К счастью, классы Vector включают множество способов более удобного копирования целого вектора в другой.
Копирование вектора подразумевает создание нового вектора, который имеет копию всех компонентов исходного вектора в том же порядке.
Пример 1. Метод Std::Copy для копирования вектора в C++
std::copy — это встроенная функция для копирования элементов одного вектора в другой. Однако убедитесь, что в целевом векторе достаточно места для хранения всех компонентов исходной последовательности.
В программе есть шапка с нужными файлами. Во-первых, у нас есть файл iostream; затем у нас есть векторный файл, стандартный файл встроенной библиотеки в C++. Через эту библиотеку мы можем использовать векторы в программе. Далее у нас есть заголовочный файл алгоритма копирования элементов векторов. Мы также включили в программу файл итератора, который позволяет нам получать доступ к элементам в векторах.
Теперь у нас есть основная функция, в которой мы объявили переменную как «vec1» векторного типа и инициализировали ее массивом целых чисел. Затем мы объявили другую переменную векторного типа как «vec2». Затем вызывается функция копирования, которая копирует все элементы «vec1» в «vec2». Функция begin() принимает первый итератор вектора, функция end() принимает последний итератор вектора, а здесь back_insertor вставляет элементы с конца.
Затем у нас есть условие цикла for, которое выполняет цикл по каждому элементу, хранящемуся в «vec1», и печатает элементы. То же самое и с элементами «vec2»; он также повторяет цикл цикла for и печатает на экране подсказки.
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main() {
vector<int> vec1{ 3, 6, 6, 11 };
vector<int> vec2;
copy(vec1.begin(), vec1.end(), back_inserter(vec2));
cout << «Elements of Vector1 : «;
for (int v=0; v<vec1.size(); v++)
cout << vec1[v] << » «;
cout << endl;
cout << «Elements of Vector2 : «;
for (int v=0; v<vec2.size(); v++)
cout << vec2[v] << » «;
cout<< endl;
return 0;
}
Выходные данные приведенной выше программы демонстрируют, что вектор был скопирован в другой вектор.
Пример 2: Метод Assign() для копирования вектора в C++
Другой альтернативой является использование открытого метода класса вектора assign(), который заменяет элементы вектора элементами из заданного диапазона.
Мы включили все необходимые файлы в раздел заголовка, что позволяет нам получить доступ к векторным элементам, скопировать векторный элемент, а также позволяет нам использовать векторы в программе. Кроме того, файл std пространства имен включен в заголовок программы.
Следующим шагом является вызов основной функции, в которой реализована программа для выполнения. Во-первых, мы определили переменную векторного типа «a», которая хранит целые числа в шаблоне массива. Затем у нас есть еще одна переменная, «b», тоже векторного типа.
После определения переменной мы использовали метод assign(), который возвращает итератор, указывающий на первый и последний вектор «a». Метод assign копирует элементы вектора «a» в элементы вектора «b». Теперь цикл for используется для перебора элементов вектора «a» и печати элементов вектора «a». Цикл for также используется для итерации элементов вектора «b» и отображает эти элементы с помощью команды cout.
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main() {
vector<int> a{3, 5, 7, 9 ,11};
vector<int> b;
b.assign(a.begin(), a.end());
cout << «Elements of vector : «;
for (int i=0; i<a.size(); i++)
cout << a[i] << » «;
cout << endl;
cout << «Elements of new vector : «;
for (int i=0; i<b.size(); i++)
cout << b[i] << » «;
cout<< endl;
return 0;
}
Вектор копируется в другой вектор. Следовательно, мы также можем использовать функцию assign в C++ для копирования элементов вектора в другие элементы вектора.
Пример 3. Метод оператора присваивания для копирования вектора в C++
Вектор также можно скопировать в другой вектор с помощью оператора присваивания. Причина, по которой работает такой оператор присваивания, заключается в том, что он просто перезаписывает существующие члены, если любой из них доступен, в противном случае присваивает элемент, откуда он скопирован.
На первом этапе основные файлы были включены в раздел заголовка, необходимый для этой программы. Кроме того, у нас есть файл пространства имен std для использования его функций в программе. Затем у нас есть основная функция, в которой мы объявили две переменные, «вектор1» и «вектор2» векторного типа. Только «vector1» инициализируется целочисленным массивом.
Теперь у нас есть оператор присваивания (=), который копирует элементы «vector1» в элементы «vector2», просто помещая оператор «=» между «vector1» и «vector2». Цикл for используется для итерации по обоим заданным векторам соответственно и печатает элементы, присутствующие в указанных векторах, через объект cout.
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main() {
vector<int> vector1{0 ,2 ,4 ,6 ,8};
vector<int> vector2;
vector2 = vector1 ;
cout << «vector1 elements : «;
for (int i=0; i<vector1.size(); i++)
cout << vector1[i] << » «;
cout << endl;
cout << «vector2 elements : «;
for (int i=0; i<vector2.size(); i++)
cout << vector2[i] << » «;
cout<< endl;
return 0;
}
Элементы vector1 копируются в элементы vector2, как показано на следующем экране подсказки.
Пример 4. Метод конструктора для копирования вектора в C++
Когда вектор объявлен, передача существующего инициализированного вектора копирует элементы данного вектора во вновь объявленный вектор. Мы должны предоставить исходный вектор целевому вектору в качестве конструктора, который затем будет называться конструктором копирования.
Начиная с раздела заголовка, у нас есть некоторые стандартные файлы встроенной библиотеки C++, которые необходимы для этой программы. Затем вызывается основная функция, где мы объявили переменную векторного типа как «p». Переменная «p» содержит массив целых чисел. Затем объявление нового вектора как «p» и передача элемента из существующего вектора «p» в метод конструктора.
Через метод конструктора элементы вектора «p» копируются в вектор «q». Цикл for используется для обоих векторов «p» и «q» и будет напечатан на экране подсказки Ubuntu.
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main() {
vector<int> p{1996 ,1997 ,1998, 1999};
vector<int> q(p);
cout << «Elements of old vector : «;
for (int i=0; i<p.size(); i++)
cout << p[i] << » «;
cout << endl;
cout << «Elements of new vector: «;
for (int i=0; i<q.size(); i++)
cout << q[i] << » «;
cout<< endl;
return 0;
}
Следовательно, элементы копируются из старого вектора «p» в новый вектор «q» на следующем экране.
Заключение
Мы узнали о многих методах копирования вектора в новый вектор. Мы использовали четыре разных подхода для копирования векторов в C++. Эти подходы включали метод std::copy, метод assign, метод оператора присваивания и передачу исходного вектора в качестве конструктора. С проверенными результатами этих методов, используемых в программе, мы скопировали элементы существующих векторных элементов во вновь сформированный вектор на языке программирования c++.