std::inplace_vector<T,N>::try_push_back
constexpr std::optional<reference> try_push_back( const T& value ); | (1) | (начиная с C++26) |
constexpr std::optional<reference> try_push_back( T&& value ); | (2) | (начиная с C++26) |
Условно добавляет указанный элемент value в конец контейнера.
Если size() == capacity() равно true, ничего не происходит. В противном случае в контейнер добавляется объект типа T:
value.value перемещается в новый элемент.Ни один итератор или ссылка не инвалидируются, кроме end(), который инвалидируется, если происходит вставка.
Параметры
| value | - | значение добавляемого элемента |
| Требования к типам | ||
-T должен соответствовать требованиям EmplaceConstructible. |
||
Возвращаемое значение
std::nullopt, если size() == capacity(), иначе std::optional<reference>(std::in_place, back()).
Сложность
Константная.
Исключения
Любое исключение, выброшенное при инициализации вставляемого элемента.
Если по какой-либо причине выбрасывается исключение, эти функции не оказывают никакого эффекта (гарантия строгой безопасности исключений).
Примечания
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_inplace_vector | 202603L | (C++26) | Улучшенный тип возвращаемого значения (std::optional<reference> вместо pointer) для try_push_back и try_emplace_back() |
Пример
#include <cassert>
#include <inplace_vector>
#include <optional>
#include <string>
int main()
{
std::inplace_vector<std::string, 2> pets;
std::string dog{"dog"};
std::optional<std::string&> p1 = pets.try_push_back("cat"); // overload (1)
assert(*p1 == "cat" and pets.size() == 1);
std::optional<std::string&> p2 = pets.try_push_back(std::move(dog)); // overload (2)
assert(*p2 == "dog" and pets.size() == 2);
assert(pets[0] == "cat" and pets[1] == "dog");
assert(pets.size() == pets.capacity());
std::optional<std::string&> p3 = pets.try_push_back("bug");
assert(p3 == std::nullopt and pets.size() == 2);
}
См. также
| добавляет элемент в конец (открытая функция-член) |
|
| создаёт элемент непосредственно в конце (открытая функция-член) |
|
| добавляет диапазон элементов в конец (открытая функция-член) |
|
| пытается создать элемент непосредственно в конце (открытая функция-член) |
|
| пытается добавить диапазон элементов в конец (открытая функция-член) |
|
| безусловно создаёт элемент непосредственно в конце (открытая функция-член) |
|
| безусловно добавляет элемент в конец (открытая функция-член) |
|
| удаляет последний элемент (открытая функция-член) |
|
создаёт std::back_insert_iterator типа, выводимого из аргумента (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/try_push_back