Comment convertir un vecteur en tableau en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la méthode data() pour convertir un vecteur en tableau
  2. Utiliser l’adresse de l’opérateur & pour convertir un vecteur en tableau
  3. Utilisez la fonction copy() pour convertir un vecteur en tableau
Comment convertir un vecteur en tableau en C++

Cet article présente la manière de convertir un vecteur en un tableau en C++.

Utiliser la méthode data() pour convertir un vecteur en tableau

Comme le standard C++ garantit que les éléments de conteneur vector sont stockés de manière contiguë en mémoire, nous pouvons appeler la méthode data, une méthode vectorielle intégrée, et attribuer l’adresse retournée au pointeur double nouvellement déclaré, comme le montre l’exemple de code suivant.

Notez que toute modification des éléments utilisant le pointeur d_arr modifiera les éléments de données du vecteur original, car nous ne faisons que pointer les éléments arr sans les copier à un nouvel emplacement.

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

Production:

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

Utiliser l’adresse de l’opérateur & pour convertir un vecteur en tableau

On peut aussi utiliser l’opérateur esperluette, qui prend l’adresse de l’objet dans la mémoire et l’assigne à un pointeur nouvellement déclaré vers un double.

Dans cet exemple, nous prenons l’adresse du premier élément dans vector, mais vous pouvez extraire un pointeur vers n’importe quel autre élément et faire les opérations nécessaires.

Les éléments peuvent être accessibles avec la notation d_arr[index] array, et de façon similaire à la méthode précédente, toute modification de d_arr affecte les données 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;
}

Utilisez la fonction copy() pour convertir un vecteur en tableau

La méthode copy() peut être utilisée pour convertir un vecteur en un tableau double de sorte que les éléments de données soient copiés dans un emplacement mémoire différent. Plus tard, nous pouvons les modifier sans nous soucier de modifier les données vector d’origine.

Notez que nous déclarons un d_arr avec 6 éléments fixes, qui est alloué comme mémoire de pile. Dans la plupart des scénarios, la taille d’un tableau ne sera pas connue à l’avance, donc vous devrez utiliser l’allocation dynamique de mémoire avec des méthodes comme new ou 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;
}

Production:

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

Article connexe - C++ Vector