◐ Shell
clean mode source ↗

std::vector::push_back – cppreference.com

Z cppreference.com

<tbody> </tbody>

void push_back( const T& value );

(1)

void push_back( T&& value );

(2) (od C++11)

Dodaje nowy element value na koniec kontenera.

1) Nowy element jest inicjalizowany jako kopia

value

.

2)

value

jest przenoszone do nowego elementu.

Jeśli nowy rozmiar size() jest większy niż capacity(), wszystkie iteratory i referencje zostają unieważnione (wliczając iterator zakońcowy). W przeciwnym wypadku tylko iterator zakońcowy zostaje unieważniony.

Parametry

value - wartość dodawanego elementu
Wymagania względem typów
-T musi spełniać wymagania CopyInsertable aby użyć przeciążenia (1).
-T musi spełniać wymagania MoveInsertable aby użyć przeciążenia (2).

Zwracana wartość

(none)

Złożoność

Zamortyzowana stała.

Wyjątki

Jeśli zostanie wyrzucony wyjątek (co może nastąpić w związku z alokacją pamięci Allocator::allocate() lub konstrukcją/przypisaniem elementu za pomocą kopiowania lub przeniesienia), funkcja nie zmieni wartości kontenera (strong exception guarantee).

Jeśli konstruktor przenoszący T nie jest noexcept oraz T nie jest CopyInsertable do *this, wektor użyje konstruktora przenoszącego. Jeśli ten konstruktor wyrzuci wyjątek, gwarancja niezmienności stanu kontenera jest zniesiona, a efekty niesprecyzowane. (od C++11)

Notka

Niektóre implementacje wyrzucają również std::length_error, kiedy push_back spowoduje realokację, która przekroczyłaby max_size, w związku z niejawnym wywołaniem odpowiednika reserve(size()+1).

Przykład

#include <vector>
#include <iostream>
#include <iomanip>
 
int main()
{
    std::vector<std::string> numbers;
 
    numbers.push_back("abc");
    std::string s = "def";
    numbers.push_back(std::move(s));

    std::cout << "vector holds: ";
    for (auto&& i : numbers) std::cout << std::quoted(i) << ' ';
    std::cout << "\nMoved-from string holds " << std::quoted(s) << '\n';
}

Wynik:

vector holds: "abc" "def" 
Moved-from string holds ""

Zobacz także