Créer un vecteur de vecteurs en C++

Jinku Hu 12 octobre 2023
  1. Utiliser le constructeur par défaut pour créer un vecteur de vecteurs en C++
  2. Utiliser la fonction rand pour remplir le vecteur de valeurs arbitraires en C++
  3. Utiliser la boucle basée sur la plage pour modifier chaque élément du vecteur de vecteurs en C++
Créer un vecteur de vecteurs en C++

Cet article explique comment créer un vecteur de vecteurs en C++.

Utiliser le constructeur par défaut pour créer un vecteur de vecteurs en C++

Puisque la création d’un vecteur de vecteurs signifie la construction d’une matrice bidimensionnelle, nous définirons les constantes LENGTH et WIDTH à spécifier comme paramètres du constructeur. La notation nécessaire pour déclarer un vecteur entier de vecteurs est vector<vector<int> > (l’espace après le premier < est uniquement pour des raisons de lisibilité).

Dans l’exemple suivant, nous déclarons essentiellement une matrice dimensionnelle 4x6, dont les éléments sont accessibles en utilisant la notation [x][y] et initialisés en utilisant des valeurs littérales. Notez que nous pouvons également accéder aux éléments du vecteur 2d en appelant deux fois la méthode at avec des positions données.

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

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

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

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;

  return EXIT_SUCCESS;
}

Production :

12
99

Utiliser la fonction rand pour remplir le vecteur de valeurs arbitraires en C++

Un vecteur de vecteurs est souvent utilisé dans de multiples flux de travail d’algèbre linéaire ou de graphiques. Ainsi, il est courant d’avoir un vecteur bidimensionnel initialisé avec des valeurs aléatoires. L’initialisation de vecteurs 2D relativement plus grands à l’aide de la liste d’initialisation peut être lourde, il faut donc utiliser l’itération en boucle et la fonction rand pour générer des valeurs arbitraires.

Comme ce cas n’implique aucune opération sensible sur le plan cryptographique, la fonction rand initialisée avec l’argument du temps courant générera des valeurs suffisamment aléatoires. Nous générons un nombre aléatoire dans l’intervalle de [0, 100) et en même temps nous sortons chaque élément vers la console.

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

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

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

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;

  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;

Utiliser la boucle basée sur la plage pour modifier chaque élément du vecteur de vecteurs en C++

En général, déclarer des matrices bidimensionnelles en utilisant std::vector comme indiqué dans les exemples précédents peut être assez inefficace et lourd en termes de calcul pour les applications à temps de latence critique. Les applications sensibles au temps déclarent généralement des matrices en utilisant la notation C de style ancien [][]. D’un autre côté, la matrice std::vector peut être itéré avec une boucle basée sur la distance, comme le montre l’exemple suivant.

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

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

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

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

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

  // Multiply Each Element By 3
  for (auto &item : vector_2d) {
    for (auto &i : item) {
      i *= 3;
    }
  }

  for (auto &item : vector_2d) {
    for (auto &i : item) {
      cout << setw(2) << 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;

249; 258; 231; 45; 279; 105;
258; 276; 147; 63; 186; 81;
270; 177; 189; 78; 120; 78;
216; 108; 33; 204; 201; 87
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