Redimensionner le tableau en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la méthode de resize pour redimensionner un tableau en C++
  2. Utiliser la méthode erase pour réduire le nombre d’éléments dans le tableau en C++
  3. Utiliser une fonction personnalisée pour redimensionner un tableau en C++
Redimensionner le tableau en C++

Cet article présente plusieurs méthodes pour redimensionner un tableau en C++.

Utiliser la méthode de resize pour redimensionner un tableau en C++

Comme les conteneurs de tableaux de longueur fixe ne sont pas censés être redimensionnés en C++, nous nous concentrerons sur la classe std::vector. Le resize est la fonction intégrée du conteneur vector, et il modifie le nombre d’éléments que le vecteur contient. La fonction peut réduire le nombre d’éléments si le premier argument count est inférieur à la taille actuelle du vector. Sinon, si l’argument count est plus grand que la taille du vecteur, resize insère des éléments supplémentaires avec des valeurs par défaut de 0 ou l’utilisateur peut fournir la valeur désirée comme second argument à la fonction.

#include <iostream>
#include <vector>

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

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1             : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  i_vec1.resize(i_vec1.size() - 2);

  cout << "i_vec1 (resized -2): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

i_vec1             : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized -2): 12; 32; 43; 53; 23;
size: 5

Utiliser la méthode erase pour réduire le nombre d’éléments dans le tableau en C++

La fonction erase est une autre méthode intégrée de la classe std::vector qui peut enlever un seul élément du vector ou même effacer toute la plage spécifiée avec les itérateurs correspondants.

Dans l’exemple suivant, une plage donnée de l’élément 2 à la fin est supprimée du vector des entiers. Notez que c’est une pratique courante de passer les paramètres de l’intervalle avec des itérateurs begin et end.

#include <iostream>
#include <vector>

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

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1          : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  i_vec1.erase(i_vec1.begin() + 2, i_vec1.end());

  cout << "i_vec1 (resized): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

i_vec1          : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32;
size: 2

Utiliser une fonction personnalisée pour redimensionner un tableau en C++

On peut aussi définir une fonction distincte qui itére à travers le vecteur et qui retire un nombre donné d’éléments de l’extrémité du vecteur. Ceci peut être implémenté en utilisant la fonction intégrée pop_back qui supprime le dernier élément du vector. Comme montré dans l’exemple de code suivant, le modèle de fonction resizeVector est défini pour prendre un vecteur de type T et plusieurs éléments à en retirer.

#include <iostream>
#include <vector>

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

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

template <typename T>
void resizeVector(vector<T> &vec, int elems) {
  for (auto i = 0; i < elems; ++i) {
    vec.pop_back();
  }
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1          : ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;

  resizeVector(i_vec1, 3);

  cout << "i_vec1 (resized): ";
  printVectorElements(i_vec1);
  cout << "size: " << i_vec1.size() << endl;
  cout << endl;

  return EXIT_SUCCESS;
}

Production :

i_vec1          : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32; 43; 53;
size: 4
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