std::list<T,Allocator>::insert
| (1) | ||
iterator insert( const_iterator pos, const T& value ); | ||
iterator insert( const_iterator pos, T&& value ); | (2) | (с C++11) |
| (3) | ||
iterator insert( const_iterator pos, size_type count, const T& value ); | ||
| (4) | ||
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); | ||
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); | (5) | (с C++11) |
Вставляет элементы в указанное место в контейнере.
value перед pos.count копий элемента value перед pos.[first, last) перед pos. | Этот перегрузчик имеет тот же эффект, что и перегрузка (3), если | (до C++11) |
| Этот перегрузчик участвует в разрешении перегрузки только в том случае, если | (с C++11) |
first и last являются итераторами в *this. ilist перед pos.Ни один итератор или ссылка не становятся недействительными.
Параметры
| pos | - | итератор перед которым будет вставлено содержимое (pos может быть итератором end()) |
| value | - | значение элемента для вставки |
| count | - | количество элементов для вставки |
| first, last | - | диапазон элементов для вставки, не может содержать итераторы в контейнер, для которого вызывается insert |
| ilist | - | список инициализации для вставки значений |
| Требования к типу | ||
-T должно удовлетворять требованиям CopyInsertable для использования перегрузки (1). |
||
-T должно удовлетворять требованиям MoveInsertable для использования перегрузки (2). |
||
-T должно удовлетворять требованиям CopyAssignable и CopyInsertable для использования перегрузки (3). |
||
-T должно удовлетворять требованиям EmplaceConstructible для использования перегрузки (4,5). |
||
Возвращаемое значение
value.pos если count == 0.pos если first == last.pos если ilist пустой.Сложность
count.std::distance(first, last).ilist.size().Исключения
Если возникает исключение по любой причине, эти функции не имеют эффекта (гарантия сильной безопасности исключений).
Пример
#include <iostream>
#include <iterator>
#include <list>
void print(int id, const std::list<int>& container)
{
std::cout << id << ". ";
for (const int x : container)
std::cout << x << ' ';
std::cout << '\n';
}
int main ()
{
std::list<int> c1(3, 100);
print(1, c1);
auto it = c1.begin();
it = c1.insert(it, 200);
print(2, c1);
c1.insert(it, 2, 300);
print(3, c1);
// reset `it` to the begin:
it = c1.begin();
std::list<int> c2(2, 400);
c1.insert(std::next(it, 2), c2.begin(), c2.end());
print(4, c1);
int arr[] = {501, 502, 503};
c1.insert(c1.begin(), arr, arr + std::size(arr));
print(5, c1);
c1.insert(c1.end(), {601, 602, 603});
print(6, c1);
}Вывод:
1. 100 100 100 2. 200 100 100 100 3. 300 300 200 100 100 100 4. 300 300 400 400 200 100 100 100 5. 501 502 503 300 300 400 400 200 100 100 100 6. 501 502 503 300 300 400 400 200 100 100 100 601 602 603
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 149 | C++98 | перегрузки (3) и (4) не возвращали ничего | возвращает итератор |
См. также
|
(с C++11) | конструирует элемент на месте (публичный член-функция) |
| вставляет элемент в начало (публичный член-функция) |
|
| добавляет элемент в конец (публичный член-функция) |
|
| создаёт итератор типа, определяемого аргументом (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/list/insert