Namensräume
Varianten
Aktionen

std::vector

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <vector>
template<

    class T,
    class Allocator = std::allocator<T>

> class vector;
(1)
namespace pmr {

    template< class T >
    using vector = std::vector<T, std::pmr::polymorphic_allocator<T>>;

}
(2) (seit C++17)
1) std::vector ist ein Sequenzcontainer, der dynamisch große Arrays kapselt.
2) std::pmr::vector ist ein Alias-Template, das einen polymorphen Allokator verwendet.

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 std::vector sind constexpr: Es ist möglich, std::vector-Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

std::vector-Objekte können jedoch im Allgemeinen nicht constexpr sein, da dynamisch zugewiesener Speicher in derselben Auswertung eines konstanten Ausdrucks freigegeben werden muss.

(seit C++20)
  1. In libstdc++ ist shrink_to_fit() im C++98-Modus nicht verfügbar.

Inhalt

[edit] Template-Parameter

T - Der Typ der Elemente.
T muss die Anforderungen von CopyAssignable und CopyConstructible erfüllen. (bis C++11)
Die auf die Elemente angewendeten Anforderungen hängen von den tatsächlichen Operationen ab, die auf dem Container ausgeführt werden. Im Allgemeinen muss der Elementtyp ein vollständiger Typ sein und die Anforderungen von Erasable erfüllen, aber viele Memberfunktionen stellen strengere Anforderungen. (seit C++11)
(bis C++17)

Die auf die Elemente angewendeten Anforderungen hängen von den tatsächlichen Operationen ab, die auf dem Container ausgeführt werden. Im Allgemeinen muss der Elementtyp die Anforderungen von Erasable erfüllen, aber viele Memberfunktionen stellen strengere Anforderungen. Dieser Container (aber nicht seine Member) kann mit einem unvollständigen Elementtyp instanziiert werden, wenn der Allokator die Komplettheitsanforderungen des Allokators erfüllt.

Feature-Test-Makro Wert Std Feature
__cpp_lib_incomplete_container_elements 201505L (C++17) Minimale Unterstützung für unvollständige Typen
(seit C++17)

[Bearbeiten]

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]

[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]

[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[edit]
allocator_type Allocator[edit]
size_type Vorzeichenloser Ganzzahltyp (normalerweise std::size_t)[edit]
difference_type Vorzeichenbehafteter Ganzzahltyp (normalerweise std::ptrdiff_t)[edit]
Referenz value_type&[edit]
const_reference const value_type&[edit]
Zeiger

Allocator::pointer

(bis C++11)

std::allocator_traits<Allocator>::pointer

(seit C++11)
[Bearbeiten]
const_pointer

Allocator::const_pointer

(bis C++11)

std::allocator_traits<Allocator>::const_pointer

(seit C++11)
[Bearbeiten]
iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu value_type

(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu value_type

(seit C++20)
[Bearbeiten]
const_iterator

LegacyRandomAccessIterator und LegacyContiguousIterator zu const value_type

(bis C++20)

LegacyRandomAccessIterator, contiguous_iterator, und ConstexprIterator zu const value_type

(seit C++20)
[Bearbeiten]
reverse_iterator std::reverse_iterator<iterator>[edit]
const_reverse_iterator std::reverse_iterator<const_iterator>[edit]

[edit] Memberfunktionen

konstruiert den vector
(public member function) [edit]
destruiert den vector
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
weist dem Container Werte zu
(public member function) [edit]
weist dem Container einen Bereich von Werten zu
(public member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Elementzugriff
Greift mit Überprüfung auf ein bestimmtes Element zu
(public member function) [edit]
Greift auf ein bestimmtes Element zu
(public member function) [edit]
Greift auf das erste Element zu
(public member function) [edit]
Greift auf das letzte Element zu
(public member function) [edit]
Direkter Zugriff auf den zugrundeliegenden zusammenhängenden Speicher
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
(C++11)
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der Container leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Gibt die maximal mögliche Anzahl von Elementen zurück
(public member function) [edit]
reserviert Speicher
(public member function) [edit]
Gibt die Anzahl der Elemente zurück, die im derzeit zugewiesenen Speicher gehalten werden können
(public member function) [edit]
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher
(public member function) [edit]
Modifizierer
leert den Inhalt
(public member function) [edit]
fügt Elemente ein
(public member function) [edit]
fügt einen Bereich von Elementen ein
(public member function) [edit]
(C++11)
konstruiert Elemente direkt (in-place)
(public member function) [edit]
entfernt Elemente
(public member function) [edit]
fügt ein Element am Ende hinzu
(public member function) [edit]
konstruiert ein Element direkt (in-place) am Ende
(public member function) [edit]
fügt einen Bereich von Elementen am Ende hinzu
(public member function) [edit]
entfernt das letzte Element
(public member function) [edit]
ändert die Anzahl der gespeicherten Elemente
(public member function) [edit]
tauscht die Inhalte
(public member function) [edit]

[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) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]
entfernt alle Elemente, die bestimmte Kriterien erfüllen
(function template) [edit]

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 auch
CopyConstructible 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

reservierbares, festes Kapazitäts-Array, Inplace, zusammenhängend
(Klassenvorlage) [edit]
(C++11)
fest dimensioniertes, inplace, zusammenhängendes Array
(Klassenvorlage) [edit]
Doppelt-endende Warteschlange
(Klassenvorlage) [edit]