Cómo copiar un array en C++

Jinku Hu 12 octubre 2023
  1. Utiliza la función copy() para copiar un array en C++
  2. Use la función copy_backward() para copiar un array
  3. Utilice el método de assign() para copiar un array
Cómo copiar un array en C++

Este artículo introducirá cómo copiar un array en C++.

Utiliza la función copy() para copiar un array en C++

El método copy() es la forma recomendada de copiar estructuras basadas en el rango con una sola llamada a la función. copy() toma el primer y el último elemento del rango y el comienzo del array de destino. Observe que puede obtener un comportamiento indefinido si el tercer parámetro está dentro del rango fuente.

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"Warty",  "Hoary", "Breezy",
                            "Dapper", "Edgy",  "Feisty"};
  vector<string> new_vec(str_vec.size());

  copy(str_vec.begin(), str_vec.end(), new_vec.begin());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(),
       std::ostream_iterator<string>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

new_vec - | Warty | Hoary | Breezy | Dapper | Edgy | Feisty |

Use la función copy_backward() para copiar un array

El método copy_backward() puede copiar un array en orden inverso con el elemento original, pero el orden se conserva. Cuando se copian los rangos superpuestos, hay una regla empírica que uno debe tener en cuenta cuando se usan los métodos std::copy y std::copy_backward: copy es apropiado cuando se copia a la izquierda (el comienzo del rango de destino está fuera del rango de origen). Por el contrario, copy_backward es apropiado cuando se copia a la derecha (el final del rango de destino está fuera del rango de origen).

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::copy_backward;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  vector<string> str_vec = {"Warty",  "Hoary", "Breezy",
                            "Dapper", "Edgy",  "Feisty"};
  vector<string> new_vec(str_vec.size());

  copy_backward(str_vec.begin(), str_vec.end(), new_vec.end());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(),
       std::ostream_iterator<string>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Utilice el método de assign() para copiar un array

assign() es un método incorporado a un contenedor vector, que reemplaza el contenido del objeto vector que lo llama por elementos pasados de la gama. El método assign() puede ser útil para copiar los vectores de los tipos que pueden ser convertidos fácilmente. En el siguiente ejemplo de código, demostramos una forma de copiar un vector char en el vector int con una sola llamada assign.

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> char_vec{'a', 'b', 'c', 'd', 'e'};
  vector<int> new_vec(char_vec.size());

  new_vec.assign(char_vec.begin(), char_vec.end());

  cout << "new_vec - | ";
  copy(new_vec.begin(), new_vec.end(), std::ostream_iterator<int>(cout, " | "));
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

new_vec - | 97 | 98 | 99 | 100 | 101 |
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

Artículo relacionado - C++ Array