public member function
<deque>

std::deque::erase

iterator erase (iterator position);
iterator erase (iterator first, iterator last);
iterator erase (const_iterator position );
iterator erase (const_iterator first, const_iterator last );
Erase elements
Removes from the deque container either a single element (position) or a range of elements ([first,last)).

This effectively reduces the container size by the number of elements removed, which are destroyed.

Double-ended queues are designed to be efficient removing (and inserting) elements at either the end or the beginning of the sequence. Removals on other positions are usually less efficient than in list or forward_list containers.

Parameters

position
Iterator pointing to a single element to be removed from the deque.
Member types iterator and const_iterator are random access iterator types that point to elements.
first, last
Iterators specifying a range within the deque] to be removed: [first,last). i.e., the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.
Member types iterator and const_iterator are random access iterator types that point to elements.

Return value

An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

Member type iterator is a random access iterator type that points to elements.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// erasing from deque
#include <iostream>
#include <deque>

int main ()
{
  std::deque<int> mydeque;

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) mydeque.push_back(i);

  // erase the 6th element
  mydeque.erase (mydeque.begin()+5);

  // erase the first 3 elements:
  mydeque.erase (mydeque.begin(),mydeque.begin()+3);

  std::cout << "mydeque contains:";
  for (std::deque<int>::iterator it = mydeque.begin(); it!=mydeque.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

Output:
mydeque contains: 4 5 7 8 9 10

Complexity

Linear on the number of elements erased (destructions). Plus, depending on the particular library implemention, up to an additional linear time on the number of elements between position and one of the ends of the deque.

Iterator validity

If the erasure operation includes the last element in the sequence, the end iterator and the iterators, pointers and references referring to the erased elements are invalidated.
If the erasure includes the first element but not the last, only those referring to the erased elements are invalidated.
If it happens anywhere else in the deque, all iterators, pointers and references related to the container are invalidated.

Data races

The container is modified.
If the erasure happens at the beginning or the end of the sequence, only the erased elements are modified (although see iterator validity above).
If it happens anywhere else, it is not safe to access or modify elements.

Exception safety

If the removed elements include the first or the last element in the container, no exceptions are thrown (no-throw guarantee).
Otherwise, the container is guaranteed to end in a valid state (basic guarantee): Copying or moving elements while relocating them may throw.
Invalid ranges produce undefined behavior.

See also