Wie extrahiert man einen Subvektor aus einem Vektor in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Listeninitialisierungsnotation {}, um einen Subvektor aus einem Vektor zu extrahieren
  2. Verwenden Sie die Funktion copy(), um einen Subvektor aus einem Vektor zu extrahieren
Wie extrahiert man einen Subvektor aus einem Vektor in C++

In diesem Artikel werden mehrere Methoden zum Extrahieren eines Subvektors aus einem C++-Vektor erläutert.

Verwenden Sie die Listeninitialisierungsnotation {}, um einen Subvektor aus einem Vektor zu extrahieren

Eine Möglichkeit, einen Subvektor zu extrahieren, besteht darin, einen neuen vector mit den ursprünglichen Vektorelementen zu initialisieren. Die folgende Methode spezifiziert Elemente mit Iteratoren, die auf gewünschte Stellen zeigen (die ersten 5 Elemente aus int_vec). Beachten Sie, dass wir in diesem Beispiel die Methode std::copy verwenden, um Vektorelemente auf die Konsole auszugeben.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

int main() {
  vector<int> int_vec{1,   23,   43,  324, 10, 222, 424,
                      649, 1092, 110, 129, 40, 3024};

  vector<int> sub_vec{int_vec.begin(), int_vec.begin() + 5};

  cout << std::left << setw(10) << "vec: ";
  copy(int_vec.begin(), int_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  cout << std::left << setw(10) << "subvec: ";
  copy(sub_vec.begin(), sub_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

vec:      1; 23; 43; 324; 10; 222; 424; 649; 1092; 110; 129; 40; 3024;
subvec:   1; 23; 43; 324; 10;

Alternativ können Sie eine Subvektorvariable initialisieren, indem Sie die Zeiger auf das gewünschte Element (z. B. &int_vec[index]) des Originalvektors angeben:

#include <iomanip>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

int main() {
  vector<int> int_vec{1,   23,   43,  324, 10, 222, 424,
                      649, 1092, 110, 129, 40, 3024};

  vector<int> sub_vec{&int_vec[0], &int_vec[5]};

  cout << std::left << setw(10) << "vec: ";
  copy(int_vec.begin(), int_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  cout << std::left << setw(10) << "subvec: ";
  copy(sub_vec.begin(), sub_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

vec:      1; 23; 43; 324; 10; 222; 424; 649; 1092; 110; 129; 40; 3024;
subvec:   1; 23; 43; 324; 10;

Verwenden Sie die Funktion copy(), um einen Subvektor aus einem Vektor zu extrahieren

Die copy() Funktion ist ein leistungsfähiges Werkzeug zur Manipulation der bereichsbasierten Daten. In diesem Fall werden wir sie verwenden, um ein bestimmtes Element literarisch von einem vector in einen anderen (als Subvektor gemeint) zu kopieren. Zuerst deklarieren wir eine sub_vec Variable mit einigen zu kopierenden Elementen. Als nächstes übergeben wir den originalen vector-Bereich als Argumente an die copy() Funktion und den Beginn-Iterator an den Ziel vector.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

constexpr int NUM_ELEMS_TO_COPY = 6;

int main() {
  vector<int> int_vec{1,   23,   43,  324, 10, 222, 424,
                      649, 1092, 110, 129, 40, 3024};
  vector<int> sub_vec(NUM_ELEMS_TO_COPY);

  copy(&int_vec[0], &int_vec[NUM_ELEMS_TO_COPY], sub_vec.begin());

  cout << std::left << setw(10) << "subvec: ";
  copy(sub_vec.begin(), sub_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}
subvec:   1; 23; 43; 324; 10; 222;

Eine andere mächtige Technik, die die copy() Methode benutzt, ist das Anhängen eines Subvektors an jede existierende vector-Variable. Der folgende Beispielcode demonstriert dies, indem 5 extrahierte Elemente mit Hilfe der Funktionsschablone std::back_inserter in die sub_vec-Variable zurückgeschoben werden. Beachten Sie, dass die copy-Methode mit dem Elementbereich als [erster, letzter] arbeitet.

#include <iomanip>
#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::setw;
using std::vector;

int main() {
  vector<int> int_vec{1,   23,   43,  324, 10, 222, 424,
                      649, 1092, 110, 129, 40, 3024};
  vector<int> sub_vec = {1, 2, 3, 4, 5, 6};

  copy(&int_vec[0], &int_vec[5], std::back_inserter(sub_vec));

  cout << std::left << setw(10) << "subvec: ";
  copy(sub_vec.begin(), sub_vec.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}
subvec:   1; 2; 3; 4; 5; 6; 1; 23; 43; 324; 10;
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++ Vector