Größenänderung eines Arrays in C++
-
Verwenden Sie die Methode
resize
, um die Größe eines Arrays in C++ zu ändern -
Verwenden der Methode
erase
zum Reduzieren der Elementanzahl in einem Array in C++ - Benutzerdefinierte Funktion zur Größenänderung eines Arrays in C++ verwenden
Dieser Artikel stellt mehrere Methoden vor, wie man die Größe eines Arrays in C++ ändern kann.
Verwenden Sie die Methode resize
, um die Größe eines Arrays in C++ zu ändern
Da die Array-Container mit fester Länge in C++ nicht in der Größe verändert werden sollen, konzentrieren wir uns auf die Klasse std::vector
. resize
ist die eingebaute Funktion des vector
-Containers, und sie ändert die Anzahl der Elemente, die der Vektor enthält. Die Funktion kann die Anzahl der Elemente reduzieren, wenn das erste Argument count
kleiner ist als die aktuelle Größe des vector
. Andernfalls, wenn das Argument count
größer als die Vektorgröße ist, fügt resize
zusätzliche Elemente mit dem Standardwert 0 ein oder der Benutzer kann den gewünschten Wert als zweites Argument an die Funktion übergeben.
#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;
}
Ausgabe:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized -2): 12; 32; 43; 53; 23;
size: 5
Verwenden der Methode erase
zum Reduzieren der Elementanzahl in einem Array in C++
Die Funktion erase
ist eine weitere eingebaute Methode der Klasse std::vector
, die ein einzelnes Element aus dem vector
entfernen oder sogar den gesamten mit entsprechenden Iteratoren angegebenen Bereich löschen kann.
Im folgenden Beispiel wird ein gegebener Bereich von Element 2 bis zum Ende aus dem vector
der ganzen Zahlen entfernt. Beachten Sie, dass es gängige Praxis ist, die Bereichsparameter mit den Iteratoren begin
/end
zu übergeben.
#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;
}
Ausgabe:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
size: 7
i_vec1 (resized): 12; 32;
size: 2
Benutzerdefinierte Funktion zur Größenänderung eines Arrays in C++ verwenden
Alternativ können wir eine eigene Funktion definieren, die durch den Vektor iteriert und eine gegebene Anzahl von Elementen vom Ende des Vektors entfernt. Dies kann mit der eingebauten Funktion pop_back
implementiert werden, die das letzte Element in vector
entfernt. Wie im nächsten Codebeispiel gezeigt, wird die Funktionsvorlage resizeVector
so definiert, dass sie einen Vektor vom Typ T
und mehrere Elemente annimmt, die daraus entfernt werden sollen.
#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;
}
Ausgabe:
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