Ridimensiona un array in C++
-
Usa il metodo
resize
per ridimensionare un array in C++ -
Usa il metodo
erase
per ridurre il numero di elementi in array in C++ - Usa la funzione definita dall’utente per ridimensionare un array in C++
Questo articolo introdurrà più metodi su come ridimensionare un array in C++.
Usa il metodo resize
per ridimensionare un array in C++
Poiché i contenitori di array a lunghezza fissa non dovrebbero essere ridimensionati in C++, ci concentreremo sulla classe std::vector
. resize
è la funzione incorporata del contenitore vector
e cambia il numero di elementi che il vettore contiene. La funzione può ridurre il numero di elementi se il primo argomento count
è inferiore alla dimensione corrente del vettore
. Altrimenti, se l’argomento count
è maggiore della dimensione del vettore, resize
inserisce elementi aggiuntivi con valori predefiniti di 0 o l’utente può fornire il valore desiderato come secondo argomento alla funzione.
#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;
}
Produzione:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized -2): 12; 32; 43; 53; 23;
size: 5
Usa il metodo erase
per ridurre il numero di elementi in array in C++
La funzione erase
è un altro metodo integrato della classe std::vector
che può rimuovere un singolo elemento dal vettore
o anche eliminare l’intero intervallo specificato con i corrispondenti iteratori.
Nell’esempio seguente, un dato intervallo dall’elemento 2 alla fine viene rimosso dal vettore
degli interi. Notare che è pratica comune passare i parametri di intervallo con gli iteratori begin
/ 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;
}
Produzione:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32;
size: 2
Usa la funzione definita dall’utente per ridimensionare un array in C++
In alternativa, possiamo definire una funzione separata che itera attraverso il vettore e rimuove un dato numero di elementi dalla fine del vettore. Questo può essere implementato usando la funzione incorporata pop_back
che rimuove l’ultimo elemento in vector
. Come mostrato nel prossimo esempio di codice, il modello di funzione resizeVector
è definito per prendere un vettore di tipo T
se diversi elementi da rimuovere da esso.
#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;
}
Produzione:
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