C++-Container-Klassen<vector>

Einführung

Die C++ Standard Template Library (STL) ist ein wichtiger Teil von C++ und bietet eine Reihe generischer Template-Klassen und -Funktionen für die Verarbeitung von Datensammlungen.<vector>Es ist eine Container-Klasse in der STL, die zum Speichern von Arrays dynamischer Größe verwendet wird.

<vector>Es ist ein Sequenzcontainer, der es Benutzern ermöglicht, Elemente am Ende des Containers schnell hinzuzufügen oder zu entfernen. Im Vergleich zu Arrays,<vector>es bietet mehr Funktionalität, wie automatische Größenänderung, wahlfreien Zugriff und so weiter.

Syntax

In C++, unter Verwendung von<vector>muss man die Header-Datei einbinden.<<vector>>. Das Folgende ist eine grundlegende Syntax:

  • Deklariere einenvector:

    std::vector<int> myVector;
  • Elemente hinzufügen:

    myVector.push_back(10);
  • Auf Elemente zugreifen:

    int firstElement = myVector[0];
  • Die Anzahl der Elemente abrufen:

    size_t size = myVector.size();
  • Klarvector:

    myVector.clear();

Deklaration und Initialisierung

<vector>Der Elementtyp muss angegeben werden, und er kann auf verschiedene Weise initialisiert werden:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1;                  // 空的vector
    std::vector<int> vec2(5);               // 长度为5的vector,元素默认初始化
    std::vector<int> vec3(5, 10);           // 长度为5的vector,元素值为10
    std::vector<int> vec4 = {1, 2, 3, 4};   // 使用初始化列表初始化

    return 0;
}

Beispiel

Das Folgende ist eine Verwendung<vector>eines einfachen Beispiels, einschließlich der Ausgabeergebnisse.

Beispiel

#include <iostream>
#include <vector>

int main() {
    // Einen Vektor deklarieren, der Ganzzahlen speichert
    std::vector<int> numbers;

    // Elemente hinzufügen
    numbers.push_back(10);
    numbers.push_back(20);
    numbers.push_back(30);

    // Die Elemente im Vektor ausgeben
    std::cout << "Vektor enthält: ";
    for (int i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;

    // Weitere Elemente hinzufügen
    numbers.push_back(40);
    numbers.push_back(50);

    // Die Elemente im Vektor erneut ausgeben
    std::cout << "Nach dem Hinzufügen weiterer Elemente enthält der Vektor: ";
    for (int i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;

    // Auf ein bestimmtes Element zugreifen
    std::cout << "Das erste Element ist: " << numbers[0] << std::endl;

    // Den Vektor leeren
    numbers.clear();

    // Prüfen, ob der Vektor leer ist
    if (numbers.empty()) {
        std::cout << "Der Vektor ist jetzt leer." << std::endl;
    }

    return 0;
}

Ausgabe:

Vector contains: 10 20 30 
After adding more elements, vector contains: 10 20 30 40 50 
The first element is: 10 
The vector is now empty.

Übliche Memberfunktionen

Die folgenden sind<vector>Einige häufig verwendete Memberfunktionen in:

Funktion Beschreibung
push_back(const T& val) Ein Element am Ende hinzufügen
pop_back() Letztes Element löschen
at(size_t pos) Gibt das Element an der angegebenen Position mit Bereichsprüfung zurück
operator[] Gibt das Element an der angegebenen Position ohne Bereichsprüfung zurück
front() Das erste Element zurückgeben
back() Gibt das letzte Element zurück
data() Gibt einen Zeiger auf das zugrunde liegende Array zurück
size() Gibt die aktuelle Anzahl der Elemente zurück
capacity() Gibt die aktuell allokierte Kapazität zurück
reserve(size_t n) Reserviert mindestensnSpeicherplatz für Elemente
resize(size_t n) Ändert die Anzahl der Elemente aufn
clear() Alle Elemente löschen
insert(iterator pos, val) Fügt ein Element an der angegebenen Position ein
erase(iterator pos) Löscht das Element an der angegebenen Position
begin() / end() Gibt begin/end-Iteratoren zurück

Beispiel

1. Grundlegende Operationen

Beispiel

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // Alle Elemente ausgeben
    std::cout << "Vektorelemente: ";
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    // Erstes und letztes Element abrufen
    std::cout << "Erstes Element: " << vec.front() << std::endl;
    std::cout << "Letztes Element: " << vec.back() << std::endl;

    return 0;
}

2. Elemente dynamisch hinzufügen und entfernen

Beispiel

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    std::cout << "Vektorgröße: " << vec.size() << std::endl;
    std::cout << "Vektorkapazität: " << vec.capacity() << std::endl;

    // Letztes Element löschen
    vec.pop_back();
    std::cout << "Nach pop_back, Größe: " << vec.size() << std::endl;

    return 0;
}

3. Grenzprüfung und sicherer Zugriff

Beispiel

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3};

    try {
        std::cout << vec.at(2) << std::endl;  // Normale Ausgabe
        std::cout << vec.at(5) << std::endl;  // Außerhalb des Bereichs, löst eine Ausnahme aus
    } catch (const std::out_of_range& e) {
        std::cout << "Ausnahme: " << e.what() << std::endl;
    }

    return 0;
}

4. Kapazität vorab reservieren

Beispiel

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;
    vec.reserve(10);  // Kapazität reservieren, um häufige Speicherallokationen zu vermeiden

    for (int i = 0; i < 10; ++i) {
        vec.push_back(i);
        std::cout << "Kapazität nach push_back(" << i << "): " << vec.capacity() << std::endl;
    }

    return 0;
}

Vergleich mit anderen Containern

Funktionenstd::vectorstd::arraystd::list
SizeDynamisch änderbarZur Kompilierzeit festgelegtDynamisch änderbar
SpeicherortZusammenhängender SpeicherZusammenhängender SpeicherNicht zusammenhängender Speicher
ZugriffsleistungSchneller wahlfreier ZugriffSchneller wahlfreier ZugriffDer wahlfreie Zugriff ist langsam, für sequenziellen Zugriff geeignet
Leistung beim Einfügen und LöschenOperationen am Ende haben eine hohe Leistung, andere Positionen sind langsamerNicht unterstütztEinfügen und Löschen an beliebiger Position sind relativ schnell
SpeicherwachstumsmethodeWächst exponentiell, wenn die Kapazität nicht ausreichtKeineKeine

<vector>Es ist ein sehr nützlicher Container in der C++ STL und bietet die Funktionalität dynamischer Arrays, wodurch das Hinzufügen und Entfernen von Elementen flexibler und bequemer wird. Anhand der obigen Beispiele können Anfänger schnell verstehen<vector>die grundlegende Verwendung und die Operationen davon. Mit fortschreitendem Lernen werden Sie entdecken<vector>seine leistungsstarken Funktionen und sein breites Anwendungsspektrum in der praktischen Programmierung.

Weitere Erweiterungen