Cómo convertir un vector en una array en C++

Jinku Hu 12 octubre 2023
  1. Utiliza el método data() para convertir un vector en un array
  2. Usar & Dirección del operador para convertir un vector en un array
  3. Utilice la función copy() para convertir un vector en un array
Cómo convertir un vector en una array en C++

Este artículo introducirá cómo convertir un vector en una array en C++.

Utiliza el método data() para convertir un vector en un array

Dado que el estándar C++ garantiza que los elementos contenedores vector se almacenan contiguamente en la memoria, podemos llamar a los data, un método vectorial incorporado, y asignar la dirección devuelta al recién declarado puntero double, como se muestra en el siguiente ejemplo de código.

Note que cualquier modificación de los elementos usando el puntero d_arr alterará los elementos de datos del vector original porque estamos simplemente apuntando a los elementos arr pero no copiándolos a una nueva ubicación.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = arr.data();
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;
-3.5; -21.1; -1.99; 0.129; 2.5; 3.111;

Usar & Dirección del operador para convertir un vector en un array

Alternativamente, podemos usar el operador ampersand, que toma la dirección del objeto en la memoria y lo asigna a un puntero recién declarado a un double.

En este ejemplo, estamos tomando la dirección del primer elemento en vector, pero puedes extraer un puntero a cualquier otro elemento y hacer las operaciones necesarias.

Se puede acceder a los elementos con la notación array de d_arr[index], y de forma similar al método anterior, cualquier modificación a d_arr está afectando a los datos de arr.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double *d_arr = &arr[0];
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Utilice la función copy() para convertir un vector en un array

El método copy() puede ser utilizado para convertir un vector en un array double para que los elementos de datos se copien en un lugar de memoria diferente. Más tarde, podemos modificarlos sin preocuparnos de alterar los datos originales del vector.

Note que estamos declarando un d_arr con 6 elementos fijos, que es asignado como memoria de pila. En la mayoría de los escenarios, el tamaño de un array no se conocerá de antemano, por lo que se necesitaría utilizar la asignación de memoria dinámica con métodos como new o malloc.

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

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

int main() {
  vector<double> arr{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  copy(arr.begin(), arr.end(), std::ostream_iterator<double>(cout, "; "));
  cout << endl;

  double d_arr[6];
  copy(arr.begin(), arr.end(), d_arr);
  for (size_t i = 0; i < arr.size(); ++i) {
    cout << d_arr[i] << "; ";
  }
  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++ Vector