Converti vettore in array in C++

Jinku Hu 12 ottobre 2023
  1. Usa il metodo data() per convertire un vettore in un array
  2. Usa & l’indirizzo dell’operatore per convertire un vettore in un array
  3. Usa la funzione copy() per convertire un vettore in un array
Converti vettore in array in C++

Questo articolo introdurrà come convertire un vettore in un array in C++.

Usa il metodo data() per convertire un vettore in un array

Poiché lo standard C++ garantisce che gli elementi del contenitore vettore siano archiviati in modo contiguo in memoria, possiamo chiamare data, un metodo vettoriale integrato, e assegnare l’indirizzo restituito al puntatore double appena dichiarato, come mostrato nel seguente codice di esempio.

Nota che qualsiasi modifica agli elementi usando il puntatore d_arr altererà gli elementi di dati del vettore originale perché stiamo semplicemente puntando agli elementi arr ma non li copiamo in una nuova posizione.

#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;
}

Produzione:

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

Usa & l’indirizzo dell’operatore per convertire un vettore in un array

In alternativa, possiamo usare l’operatore e commerciale, che prende l’indirizzo dell’oggetto in memoria e lo assegna a un puntatore appena dichiarato a un double.

In questo esempio, stiamo prendendo l’indirizzo del primo elemento in vector, ma puoi estrarre un puntatore a qualsiasi altro elemento ed eseguire le operazioni secondo necessità.

È possibile accedere agli elementi con la notazione di array d_arr[index] e, analogamente al metodo precedente, qualsiasi modifica a d_arr influisce sui dati di 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;
}

Usa la funzione copy() per convertire un vettore in un array

Il metodo copy() può essere utilizzato per convertire un vettore in un array double in modo che gli elementi di dati vengano copiati in una diversa posizione di memoria. Successivamente, possiamo modificarli senza preoccuparci di alterare i dati originali del vector.

Si noti che stiamo dichiarando un d_arr con 6 elementi fissi, che è allocato come memoria dello stack. Nella maggior parte degli scenari, la dimensione di un array non sarà nota in anticipo, quindi sarà necessario utilizzare l’allocazione dinamica della memoria con metodi come 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;
}

Produzione:

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

Articolo correlato - C++ Vector