std::forward_list<T,Allocator>:: emplace_after
|
template
<
class
...
Args
>
iterator emplace_after ( const_iterator pos, Args && ... args ) ; |
(начиная с C++11)
(constexpr начиная с C++26) |
|
Вставляет новый элемент в позицию после указанной позиции в контейнере. Элемент создается на месте, то есть никакие операции копирования или перемещения не выполняются. Конструктор элемента вызывается с точно такими же аргументами, которые были переданы функции.
Если выполняется любое из следующих условий, поведение не определено:
-
Tне является EmplaceConstructible вforward_listиз std:: forward < Args > ( args ) ... . -
pos
не находится в диапазоне
[before_begin(),end()).
Никакие итераторы или ссылки не инвалидируются.
Содержание |
Параметры
| pos | - | итератор, после которого будет создан новый элемент |
| args | - | аргументы для передачи конструктору элемента |
Возвращаемое значение
Итератор на новый элемент.
Сложность
Константа.
Исключения
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Пример
Пример демонстрирует каноническое заполнение односвязного списка в естественном (в отличие от обратного) порядке.
#include <forward_list> #include <iostream> #include <string> struct Sum { std::string remark; int sum; Sum(std::string remark, int sum) : remark{std::move(remark)}, sum{sum} {} void print() const { std::cout << remark << " = " << sum << '\n'; } }; int main() { std::forward_list<Sum> list; auto iter = list.before_begin(); std::string str{"1"}; for (int i{1}, sum{1}; i != 10; sum += i) { iter = list.emplace_after(iter, str, sum); ++i; str += " + " + std::to_string(i); } for (const Sum& s : list) s.print(); }
Вывод:
1 = 1 1 + 2 = 3 1 + 2 + 3 = 6 1 + 2 + 3 + 4 = 10 1 + 2 + 3 + 4 + 5 = 15 1 + 2 + 3 + 4 + 5 + 6 = 21 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
Смотрите также
|
вставляет элементы после элемента
(публичная функция-член) |