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 einen
vector: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();
-
Klar
vector: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 <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 <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 <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 <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 <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
| Funktionen | std::vector | std::array | std::list |
|---|---|---|---|
| Size | Dynamisch änderbar | Zur Kompilierzeit festgelegt | Dynamisch änderbar |
| Speicherort | Zusammenhängender Speicher | Zusammenhängender Speicher | Nicht zusammenhängender Speicher |
| Zugriffsleistung | Schneller wahlfreier Zugriff | Schneller wahlfreier Zugriff | Der wahlfreie Zugriff ist langsam, für sequenziellen Zugriff geeignet |
| Leistung beim Einfügen und Löschen | Operationen am Ende haben eine hohe Leistung, andere Positionen sind langsamer | Nicht unterstützt | Einfügen und Löschen an beliebiger Position sind relativ schnell |
| Speicherwachstumsmethode | Wächst exponentiell, wenn die Kapazität nicht ausreicht | Keine | Keine |
<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.