Namensräume
Varianten
Aktionen

std::vector<T,Allocator>::push_back

Von cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
void push_back( const T& value );
(1) (constexpr seit C++20)
void push_back( T&& value );
(2) (seit C++11)
(constexpr seit C++20)

Hängt das gegebene Element value an das Ende des Containers an.

1) Das neue Element wird als Kopie von value initialisiert.
2) value wird in das neue Element verschoben.

Wenn nach der Operation die neue size() größer als die alte capacity() ist, findet eine Reallokation statt. In diesem Fall werden alle Iteratoren (einschließlich des end()-Iterators) und alle Referenzen auf die Elemente ungültig. Andernfalls wird nur der end()-Iterator ungültig.

Inhalt

[bearbeiten] Parameter

value - Der Wert des anzuhängenden Elements
Typanforderungen
-
T muss die Anforderungen von CopyInsertable erfüllen, um Überladung (1) zu verwenden.
-
T muss die Anforderungen von MoveInsertable erfüllen, um Überladung (2) zu verwenden.

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Komplexität

Amortisiert konstant.

[bearbeiten] Ausnahmen

Wenn eine Ausnahme ausgelöst wird (was aufgrund von Allocator::allocate() oder dem Kopier-/Verschiebekonstruktor/-zuweisungsoperator des Elements geschehen kann), hat diese Funktion keine Auswirkungen (starkes Ausnahme-Garantie).

Wenn der Move-Konstruktor von T nicht noexcept ist und T nicht CopyInsertable in *this ist, verwendet der Vektor den werfenden Move-Konstruktor. Wenn dieser wirft, ist die Garantie aufgehoben und die Auswirkungen sind nicht spezifiziert.

(seit C++11)

Anmerkungen

Einige Implementierungen werfen std::length_error, wenn push_back eine Neuzuweisung verursacht, die max_size überschreitet (aufgrund eines impliziten Aufrufs eines Äquivalents von reserve(size() + 1)).

[bearbeiten] Beispiel

#include <iomanip>
#include <iostream>
#include <string>
#include <vector>
 
int main()
{
    std::vector<std::string> letters;
 
    letters.push_back("abc");
    std::string s{"def"};
    letters.push_back(std::move(s));
 
    std::cout << "std::vector letters holds: ";
    for (auto&& e : letters)
        std::cout << std::quoted(e) << ' ';
 
    std::cout << "\nMoved-from string s holds: " << std::quoted(s) << '\n';
}

Mögliche Ausgabe

std::vector letters holds: "abc" "def"
Moved-from string s holds: ""

[bearbeiten] Siehe auch

konstruiert ein Element direkt (in-place) am Ende
(public member function) [edit]
entfernt das letzte Element
(public member function) [edit]
erstellt einen std::back_insert_iterator vom Typ, der aus dem Argument abgeleitet wird
(Funktionsvorlage) [bearbeiten]