Namespaces
Variants
Views
Actions

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

From cppreference.com
m (be explicit instead of using unnecessary auto, which obfuscates)
m (The loop as it current form will work pre-C++11 (the initial version uses auto))
Line 116: Line 116:
 
     print_container(c);
 
     print_container(c);
  
     // Erase all even numbers (C++11 and later)
+
     // Erase all even numbers
 
     for (std::{{{1}}}<int>::iterator it = c.begin(); it != c.end(); ) {
 
     for (std::{{{1}}}<int>::iterator it = c.begin(); it != c.end(); ) {
 
         if (*it % 2 == 0) {
 
         if (*it % 2 == 0) {

Revision as of 10:26, 11 August 2022

(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 (int 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
    for (std::{{{1}}}<int>::iterator 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]