Namespaces
Variants
Views
Actions

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

From cppreference.com
m (Minor tweak.)
m ({{tt}})
Line 116: Line 116:
  
 
     // Erase all even numbers
 
     // 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)
Line 134: Line 134:
 
===Defect reports===
 
===Defect reports===
 
{{dr list begin}}
 
{{dr list begin}}
{{dr list item|wg=lwg|dr=151|std=C++98|before={{c|first}} was required to be dereferenceable, which made<br>the behavior of clearing an empty {{{1|}}} undefined|after=not required if<br>{{c|1= first == last}}}}
+
{{dr list item|wg=lwg|dr=151|std=C++98|before={{c|first}} was required to be dereferenceable, which made<br>the behavior of clearing an empty {{tt|{{{1|}}}}} undefined|after=not required if<br>{{c|1= first == last}}}}
 
{{dr list end}}
 
{{dr list end}}
  

Revision as of 23:56, 15 September 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

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 151 C++98 first was required to be dereferenceable, which made
the behavior of clearing an empty undefined
not required if
first == last

See also

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