Copiar um objeto Vector Container em C++

Jinku Hu 12 outubro 2023
  1. Use a notação de lista de inicializador para copiar um objeto de recipiente de vetor em C++
  2. Use o algoritmo std::copy para copiar um objeto Vector Container em C++
  3. Use o Operador de Atribuição de Cópia para Copiar um Objeto Contêiner de Vetor em C++
  4. Use o Construtor de Cópia para Copiar um Objeto Contêiner de Vetor em C++
  5. Use a função de membro assign para copiar um objeto Vector Container em C++
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;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ Vector