##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::deque::insert

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

[edit template]

| (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 `InputIterator`, 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.

### [edit] 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)

### [edit] 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.

### [edit] 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.

### [edit] Exceptions

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

### [edit] See also

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

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