Spec-Zone.ru › C++

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

void push_back( const T& value );
(1) (constexpr с C++20)
void push_back( T&& value );
(2) (с C++11)
(constexpr с C++20)

Добавляет указанный элемент value в конец контейнера.

1) Новый элемент инициализируется копией value.
2) value перемещается в новый элемент.

Если после операции новое значение size() больше старого значения capacity(), происходит перераспределение памяти, в результате которого все итераторы (включая итератор end()) и все ссылки на элементы становятся недействительными. В противном случае становится недействительным только итератор end().

Параметры

value - значение добавляемого элемента
Требования к типу
-T должен удовлетворять требованиям CopyInsertable, чтобы можно было использовать перегрузку (1).
-T должен удовлетворять требованиям MoveInsertable, чтобы можно было использовать перегрузку (2).

Сложность

Амортизированная константная.

Исключения

Если выбрасывается исключение (например, из-за Allocator::allocate() или конструктора/оператора присваивания копированием или перемещением элемента), эта функция не оказывает эффекта (строгая гарантия безопасности исключений).

Если конструктор перемещения T не является noexcept, а T не является CopyInsertable в *this, vector использует конструктор перемещения, который может выбросить исключение. Если он выбросит исключение, гарантия не действует, а эффекты не определены.

(начиная с C++11)

Примечания

Некоторые реализации выбрасывают std::length_error, когда push_back вызывает перераспределение памяти, превышающее max_size (из-за неявного вызова эквивалента reserve(size() + 1)).

Пример

#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';
}

Возможный вывод:

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

См. также

emplace_back
(C++11)
создаёт элемент непосредственно в конце контейнера
(открытая функция-член)
pop_back
удаляет последний элемент
(открытая функция-член)
back_inserter
создаёт std::back_insert_iterator типа, выводимого из аргумента
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/vector/push_back

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API