Copiar um objeto Vector Container em C++
- Use a notação de lista de inicializador para copiar um objeto de recipiente de vetor em C++
-
Use o algoritmo
std::copy
para copiar um objeto Vector Container em C++ - Use o Operador de Atribuição de Cópia para Copiar um Objeto Contêiner de Vetor em C++
- Use o Construtor de Cópia para Copiar um Objeto Contêiner de Vetor em C++
-
Use a função de membro
assign
para copiar um objeto Vector Container em C++
Este artigo explica vários métodos de como copiar um objeto recipiente std::vector
em C++.
Use a notação de lista de inicializador para copiar um objeto de recipiente de vetor em C++
O std::vector
é a estrutura de dados central fornecida na biblioteca de contêineres STL. Ele implementa elementos de array dimensionados dinamicamente, os quais são armazenados de forma contígua. O gerenciamento de memória é feito automaticamente conforme o usuário adiciona ou remove elementos do array. Podemos fazer uma cópia do objeto vetorial usando a notação de lista de inicializador ao construir uma nova variável do tipo std::vector
. Observe que só precisamos passar os iteradores begin
e end
do objeto vetorial original que precisa ser copiado para um novo objeto. Usando a mesma notação, você pode extrair qualquer subvetor do objeto, especificando os iteradores correspondentes como os argumentos entre colchetes.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = {vec1.begin(), vec1.end()};
vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};
printVector(vec1_c);
printVector(vec1_cc);
return EXIT_SUCCESS;
}
Resultado:
23;
43;
324;
222;
649;
102;
40;
304;
23;
43;
324;
222;
Use o algoritmo std::copy
para copiar um objeto Vector Container em C++
Outro método para copiar o objeto std::vector
é invocar a função std::copy
da biblioteca de algoritmos STL. Ele fornece a operação de cópia genérica para objetos baseados em intervalo. A função tem várias sobrecargas, mas a sobrecarga utilizada no fragmento de código a seguir leva três argumentos de iterador. Os dois primeiros especificam o intervalo do vetor original, enquanto o terceiro iterador indica o início do intervalo do vetor de destino.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1.size());
copy(vec1.begin(), vec1.end(), vec1_c.begin());
printVector(vec1_c);
return EXIT_SUCCESS;
}
Resultado:
23;
43;
324;
222;
649;
102;
40;
304;
Use o Operador de Atribuição de Cópia para Copiar um Objeto Contêiner de Vetor em C++
Alternativamente, você pode usar o operador de atribuição de cópia para copiar o conteúdo do objeto recipiente std::vector
. Essa notação é a solução mais concisa para esse problema. Precisamos apenas atribuir a variável do vetor original ao objeto vetorial recém-declarado.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = vec1;
printVector(vec1_c);
return EXIT_SUCCESS;
}
Resultado:
23;
43;
324;
222;
649;
102;
40;
304;
Use o Construtor de Cópia para Copiar um Objeto Contêiner de Vetor em C++
Por outro lado, um construtor de cópia da classe std::vector
oferece um método semelhante para copiar o vetor em um objeto vetorial recém-declarado. Nesse caso, precisamos passar a variável do vetor original entre parênteses quando a variável do vetor recém-criada for declarada.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1);
printVector(vec1_c);
return EXIT_SUCCESS;
}
Resultado:
23;
43;
324;
222;
649;
102;
40;
304;
Use a função de membro assign
para copiar um objeto Vector Container em C++
O contêiner std::vector
fornece a função membro assign
, que você pode utilizar para substituir o conteúdo de um objeto vetorial pelos elementos de outro vetor. Observe que podemos inicializar um contêiner de vector
vazio e então invocar a função assign
do objeto para copiar o conteúdo de outro vetor.
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c;
vec1_c.assign(vec1.begin(), vec1.end());
printVector(vec1_c);
return EXIT_SUCCESS;
}
Resultado:
23;
43;
324;
222;
649;
102;
40;
304;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook