Redimensionner le tableau en C++
-
Utiliser la méthode de
resize
pour redimensionner un tableau en C++ -
Utiliser la méthode
erase
pour réduire le nombre d’éléments dans le tableau en C++ - Utiliser une fonction personnalisée pour redimensionner un 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
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