Déclarer un tableau de vecteurs dans C++ STL

Jinku Hu 12 octobre 2023
  1. Utiliser la notation de tableau de style C pour déclarer un tableau de vecteurs en C++
  2. Utilisez std::vector pour déclarer un tableau de vecteurs en C++
Déclarer un tableau de vecteurs dans C++ STL

Cet article présente plusieurs méthodes expliquant comment déclarer un tableau de vecteurs en C++.

Utiliser la notation de tableau de style C pour déclarer un tableau de vecteurs en C++

Un tableau fixe de vecteurs peut être déclaré par la notation entre crochets de tableau de style C - []. Cette méthode définit essentiellement un tableau à deux dimensions avec un nombre fixe de lignes et un nombre variable de colonnes. Les colonnes peuvent être ajoutées avec l’appel de la fonction push_back et les éléments accessibles par la notation arr[x][y] si nécessaire. Dans l’exemple suivant, nous transmettons dix valeurs entières aléatoires à chaque colonne du tableau, ce qui donne une matrice dix par dix.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

int main() {
  vector<int> arr_vectors[10];

  for (auto &vec : arr_vectors) {
    for (int i = 0; i < 10; ++i) {
      vec.push_back(rand() % 100);
    }
  }

  for (auto &item : arr_vectors) {
    for (auto &i : item) {
      cout << setw(3) << i << "; ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Production:

83;  86;  77;  15;  93;  35;  86;  92;  49;  21;
62;  27;  90;  59;  63;  26;  40;  26;  72;  36;
11;  68;  67;  29;  82;  30;  62;  23;  67;  35;
29;   2;  22;  58;  69;  67;  93;  56;  11;  42;
29;  73;  21;  19;  84;  37;  98;  24;  15;  70;
13;  26;  91;  80;  56;  73;  62;  70;  96;  81;
 5;  25;  84;  27;  36;   5;  46;  29;  13;  57;
24;  95;  82;  45;  14;  67;  34;  64;  43;  50;
87;   8;  76;  78;  88;  84;   3;  51;  54;  99;
32;  60;  76;  68;  39;  12;  26;  86;  94;  39;

Utilisez std::vector pour déclarer un tableau de vecteurs en C++

Alternativement, on peut utiliser le conteneur std::vector pour déclarer un tableau variable de vecteurs. L’extrait de code suivant illustre la déclaration et l’initialisation de la matrice quatre par quatre d’entiers. Notez que le deuxième argument du constructeur est un autre constructeur vectoriel qui initialise ses éléments à des zéros. Les éléments de l’objet sont accessibles en utilisant la même notation arr[x][y]. Du côté positif, la ligne et les colonnes peuvent être étendues dynamiquement en utilisant les fonctions intégrées du conteneur std::vector.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 4;

int main() {
  vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));

  vector_2d[2][2] = 12;
  cout << vector_2d[2][2] << endl;

  vector_2d.at(3).at(3) = 99;
  cout << vector_2d[3][3] << endl;

  cout << endl;

  return EXIT_SUCCESS;
}

Production:

12
99

L’itération à travers le vecteur de vecteurs peut être effectuée en utilisant les boucles basées sur des plages imbriquées à deux niveaux. Notez que le nom d’alias de l’élément d’accès est l’élément vectoriel dans la boucle interne for.

#include <iomanip>
#include <iostream>
#include <vector>

using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int LENGTH = 4;
constexpr int WIDTH = 4;

int main() {
  vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));

  std::srand(std::time(nullptr));
  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i = rand() % 100;
      cout << setw(2) << i << "; ";
    }
    cout << endl;
  }
  cout << endl;

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i *= 3;
    }
  }

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      cout << setw(3) << i << "; ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Production:

62; 85; 69; 73;
22; 55; 79; 89;
26; 89; 44; 66;
32; 40; 64; 32;

186; 255; 207; 219;
 66; 165; 237; 267;
 78; 267; 132; 198;
 96; 120; 192;  96;
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++ Array