Namespaces
Variants
Views
Actions

Difference between revisions of "Template:cpp/container/erase"

From cppreference.com
(simplified example code)
m (Corrected typo: dereferencable > dereferenceable)
Line 30: Line 30:
 
{{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}}
 
{{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}}
  
The iterator {{tt|pos}} must be valid and dereferenceable. Thus the {{lc|end()}} iterator (which is valid, but is not dereferencable) cannot be used as a value for {{tt|pos}}.
+
The iterator {{tt|pos}} must be valid and dereferenceable. Thus the {{lc|end()}} iterator (which is valid, but is not dereferenceable) cannot be used as a value for {{tt|pos}}.
  
 
The iterator {{tt|first}} does not need to be dereferenceable if {{tt|first{{==}}last}}: erasing an empty range is a no-op.
 
The iterator {{tt|first}} does not need to be dereferenceable if {{tt|first{{==}}last}}: erasing an empty range is a no-op.

Revision as of 10:45, 11 September 2020

(1)
iterator erase( iterator pos );
(until C++11)
iterator erase( const_iterator pos );
(since C++11)
(2)
iterator erase( iterator first, iterator last );
(until C++11)
iterator erase( const_iterator first, const_iterator last );
(since C++11)

Erases the specified elements from the container.

1) Removes the element at pos.
2) Removes the elements in the range [first, last).

The iterator pos must be valid and dereferenceable. Thus the end() iterator (which is valid, but is not dereferenceable) cannot be used as a value for pos.

The iterator first does not need to be dereferenceable if first==last: erasing an empty range is a no-op.

Contents

Parameters

pos - iterator to the element to remove
first, last - range of elements to remove

Return value

Iterator following the last removed element.

If pos refers to the last element, then the end() iterator is returned.

If last==end() prior to removal, then the updated end() iterator is returned.

If [first, last) is an empty range, then last is returned.

Exceptions

Complexity

Example

#include <{{{1}}}>
#include <iostream>
#include <iterator>
 
void print_container(const std::{{{1}}}<int>& c) 
{
    for (auto &i : c) {
        std::cout << i << " ";
    }
    std::cout << '\n';
}
 
int main( )
{
    std::{{{1}}}<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    print_container(c);
 
    c.erase(c.begin());
    print_container(c);
 
    std::{{{1}}}<int>::iterator range_begin = c.begin();
    std::{{{1}}}<int>::iterator range_end = c.begin();
    std::advance(range_begin,2);
    std::advance(range_end,5);
 
    c.erase(range_begin, range_end);
    print_container(c);
 
    // Erase all even numbers (C++11 and later)
    for (auto it = c.begin(); it != c.end(); ) {
        if (*it % 2 == 0) {
            it = c.erase(it);
        } else {
            ++it;
        }
    }
    print_container(c);
}

Output:

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 6 7 8 9
1 7 9

See also

clears the contents
(public member function of std::{{{1}}}) [edit]