# std::deque<T,Allocator>::insert

From cppreference.com
< cpp‎ | container‎ | deque

| (1) |
iterator insert( iterator pos, const T& value ); |  | (until C++11)
iterator insert( const_iterator pos, const T& value ); |  | (since C++11)
iterator insert( const_iterator pos, T&& value ); | (2) | (since C++11)
| (3) |
void insert( iterator pos, size_type count, const T& value ); |  | (until C++11)
iterator insert( const_iterator pos, size_type count, const T& value ); |  | (since C++11)
| (4) |
template< class InputIt > void insert( iterator pos, InputIt first, InputIt last); |  | (until C++11)
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); |  | (since C++11)
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); | (5) | (since C++11)

Inserts elements at the specified location in the container.

1-2) inserts `value` before `pos`
3) inserts `count` copies of the `value` before `pos`
4) inserts elements from range `[first, last)` before `pos`.

This overload has the same effect as overload (3) if `InputIt` is an integral type. | (until C++11)
This overload only participates in overload resolution if `InputIt` qualifies as LegacyInputIterator, to avoid ambiguity with the overload (3). | (since C++11)

The behavior is undefined if `first` and `last` are iterators into *this.
5) inserts elements from initializer list `ilist` before `pos`.

All iterators, including the past-the-end iterator, are invalidated. References are invalidated too, unless pos == begin() or pos == end(), in which case they are not invalidated.

### Parameters

pos | - | iterator before which the content will be inserted. `pos` may be the end() iterator
value | - | element value to insert
first, last | - | the range of elements to insert, can't be iterators into container for which insert is called
ilist | - | initializer list to insert the values from
Type requirements
- `T` must meet the requirements of CopyAssignable and CopyInsertable in order to use overload (1).
- `T` must meet the requirements of MoveAssignable and MoveInsertable in order to use overload (2).
- `T` must meet the requirements of CopyAssignable and CopyInsertable in order to use overload (3).
- `T` must meet the requirements of EmplaceConstructible in order to use overload (4,5).
- `T` must meet the requirements of Swappable, MoveAssignable, MoveConstructible and MoveInsertable in order to use overload (4,5). (since C++17)

### Return value

1-2) Iterator pointing to the inserted `value`
3) Iterator pointing to the first element inserted, or `pos` if count==0.
4) Iterator pointing to the first element inserted, or `pos` if first==last.
5) Iterator pointing to the first element inserted, or `pos` if `ilist` is empty.

### Complexity

1-2) Constant plus linear in the lesser of the distances between `pos` and either of the ends of the container.
3) Linear in count plus linear in the lesser of the distances between `pos` and either of the ends of the container.
4) Linear in std::distance(first, last) plus linear in the lesser of the distances between `pos` and either of the ends of the container.
5) Linear in ilist.size() plus linear in the lesser of the distances between `pos` and either of the ends of the container.

### Exceptions

If an exception is thrown when inserting a single element at either end, this function has no effect (strong exception guarantee).

### See also

emplace (C++11) | constructs element in-place (public member function)
push_front | inserts an element to the beginning (public member function)
push_back | adds an element to the end (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/deque/insert&oldid=50462"