Größenänderung eines Arrays in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Methode resize, um die Größe eines Arrays in C++ zu ändern
  2. Verwenden der Methode erase zum Reduzieren der Elementanzahl in einem Array in C++
  3. Benutzerdefinierte Funktion zur Größenänderung eines Arrays in C++ verwenden
Größenänderung eines Arrays in C++

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
Autor: 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

Verwandter Artikel - C++ Array