std::vector
| Definiert in Header <vector> |
||
| template< class T, |
(1) | |
| namespace pmr { template< class T > |
(2) | (seit C++17) |
std::vector ist ein Sequenzcontainer, der dynamisch große Arrays kapselt.Die Elemente werden zusammenhängend gespeichert, was bedeutet, dass die Elemente nicht nur über Iteratoren, sondern auch über Offsets zu regulären Zeigern auf Elemente zugänglich sind. Dies bedeutet, dass ein Zeiger auf ein Element eines Vektors an jede Funktion übergeben werden kann, die einen Zeiger auf ein Element eines Arrays erwartet.
Die Speicherung des Vektors wird automatisch gehandhabt und bei Bedarf erweitert. Vektoren beanspruchen normalerweise mehr Speicher als statische Arrays, da mehr Speicher für zukünftiges Wachstum zugewiesen wird. Auf diese Weise muss ein Vektor nicht bei jeder Einfügung eines Elements neu zugeteilt werden, sondern erst dann, wenn der zusätzliche Speicher erschöpft ist. Die Gesamtmenge des zugewiesenen Speichers kann mit der Funktion capacity() abgefragt werden. Zusätzlicher Speicher kann über einen Aufruf von shrink_to_fit()[1] an das System zurückgegeben werden.
Neuallokationen sind in Bezug auf die Leistung normalerweise kostspielige Operationen. Die Funktion reserve() kann verwendet werden, um Neuallokationen zu vermeiden, wenn die Anzahl der Elemente im Voraus bekannt ist.
Die Komplexität (Effizienz) gängiger Operationen auf Vektoren ist wie folgt:
- Zufallszugriff – konstant 𝓞(1).
- Einfügen oder Entfernen von Elementen am Ende – amortisiert konstant 𝓞(1).
- Einfügen oder Entfernen von Elementen – linear in der Entfernung zum Ende des Vektors 𝓞(n).
std::vector (für T außer bool) erfüllt die Anforderungen von Container, AllocatorAwareContainer(seit C++11), SequenceContainer, ContiguousContainer(seit C++17) und ReversibleContainer.
|
Alle Memberfunktionen von |
(seit C++20) |
- ↑ In libstdc++ ist
shrink_to_fit()im C++98-Modus nicht verfügbar.
Inhalt |
[edit] Template-Parameter
| T | - | Der Typ der Elemente.
| ||||||||||||||
| Allocator | - | Ein Allokator, der zum Erwerb/Freigeben von Speicher und zum Erstellen/Zerstören der Elemente in diesem Speicher verwendet wird. Der Typ muss die Anforderungen von Allocator erfüllen. Das Verhalten ist undefiniert(bis C++20)Das Programm ist ill-formed(seit C++20), wenn Allocator::value_type nicht mit T übereinstimmt. |
[edit] Spezialisierungen
Die Standardbibliothek stellt eine Spezialisierung von std::vector für den Typ bool zur Verfügung, die für die Speicherplatzersparnis optimiert sein kann.
| speichereffizientes dynamisches Bitset (class template specialization) |
[edit] Iterator-Invalidierung
| Operationen | Invalidiert |
|---|---|
| Alle Leseoperationen | Niemals. |
| swap, std::swap | end() |
| clear, operator=, assign | Immer. |
| reserve, shrink_to_fit | Wenn sich die Kapazität des Vektors geändert hat, alle. Andernfalls keine. |
| erase | Entfernte Elemente und alle nachfolgenden Elemente (einschließlich end()). |
| push_back, emplace_back | Wenn sich die Kapazität des Vektors geändert hat, alle. Andernfalls nur end(). |
| insert, emplace | Wenn sich die Kapazität des Vektors geändert hat, alle. Andernfalls nur diejenigen ab dem Einfügepunkt (einschließlich end()). |
| resize | Wenn sich die Kapazität des Vektors geändert hat, alle. Andernfalls nur end() und alle entfernten Elemente. |
| pop_back | Das entfernte Element und end(). |
[edit] Member-Typen
| Mitgliedertyp | Definition | ||||
value_type
|
T | ||||
allocator_type
|
Allocator | ||||
size_type
|
Vorzeichenloser Ganzzahltyp (normalerweise std::size_t) | ||||
difference_type
|
Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t) | ||||
Referenz
|
value_type& | ||||
const_reference
|
const value_type& | ||||
Zeiger
|
| ||||
const_pointer
|
| ||||
iterator
|
| ||||
const_iterator
|
| ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
[edit] Memberfunktionen
konstruiert den vector(public member function) | |
destruiert den vector(public member function) | |
| weist dem Container Werte zu (public member function) | |
| weist dem Container Werte zu (public member function) | |
| (C++23) |
weist dem Container einen Bereich von Werten zu (public member function) |
| gibt den zugehörigen Allocator zurück (public member function) | |
Elementzugriff | |
| Greift mit Überprüfung auf ein bestimmtes Element zu (public member function) | |
| Greift auf ein bestimmtes Element zu (public member function) | |
| Greift auf das erste Element zu (public member function) | |
| Greift auf das letzte Element zu (public member function) | |
| Direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher (public member function) | |
Iteratoren | |
| (C++11) |
gibt einen Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Iterator zum Ende zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Anfang zurück (public member function) |
| (C++11) |
gibt einen Reverse-Iterator zum Ende zurück (public member function) |
Kapazität | |
| prüft, ob der Container leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
| Gibt die maximal mögliche Anzahl von Elementen zurück (public member function) | |
| reserviert Speicher (public member function) | |
| Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können (public member function) | |
| (DR*) |
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher (public member function) |
Modifizierer | |
| leert den Inhalt (public member function) | |
| fügt Elemente ein (public member function) | |
| (C++23) |
fügt einen Bereich von Elementen ein (public member function) |
| (C++11) |
konstruiert Elemente direkt (in-place) (public member function) |
| entfernt Elemente (public member function) | |
| fügt ein Element am Ende hinzu (public member function) | |
| (C++11) |
konstruiert ein Element direkt (in-place) am Ende (public member function) |
| (C++23) |
fügt einen Bereich von Elementen am Ende hinzu (public member function) |
| entfernt das letzte Element (public member function) | |
| ändert die Anzahl der gespeicherten Elemente (public member function) | |
| tauscht die Inhalte (public member function) | |
[edit] Nicht-Member-Funktionen
| (entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(entfernt in C++20)(C++20) |
vergleicht lexikographisch die Werte zweier vectors(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| entfernt alle Elemente, die bestimmte Kriterien erfüllen (function template) |
Deduction Guides |
(seit C++17) |
[edit] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichskonstruktion und -einfügung für Container |
[edit] Beispiel
#include <iostream> #include <vector> int main() { // Create a vector containing integers std::vector<int> v = {8, 4, 5, 9}; // Add two more integers to vector v.push_back(6); v.push_back(9); // Overwrite element at position 2 v[2] = -1; // Print out the vector for (int n : v) std::cout << n << ' '; std::cout << '\n'; }
Ausgabe
8 4 -1 9 6 9
[edit] Defect Reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 69 | C++98 | Die Zusammenhängung des Speichers für Elemente von vector wurde nicht gefordert |
Gefordert |
| LWG 230 | C++98 | T musste nicht CopyConstructible sein(ein Element vom Typ T konnte möglicherweise nicht konstruiert werden) |
T muss auchCopyConstructible sein |
| LWG 464 | C++98 | Der Zugriff auf den zugrundeliegenden Speicher eines leeren vector führte zu undefiniertem Verhalten |
data-Funktion bereitgestellt |
[edit] Siehe auch
| (C++26) |
reservierbares, festes Kapazitäts-Array, Inplace, zusammenhängend (Klassenvorlage) |
| (C++11) |
fest dimensioniertes, inplace, zusammenhängendes Array (Klassenvorlage) |
| Doppelt-endende Warteschlange (Klassenvorlage) |