Difference between revisions of "Template:cpp/container/erase"
From cppreference.com
(remove duplicated moveassignable) |
|||
Line 25: | Line 25: | ||
@2@ Removes the elements in the range {{tt|[first, last)}}. | @2@ Removes the elements in the range {{tt|[first, last)}}. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}} | {{cpp/container/note_iterator_invalidation|{{{1|}}}|erase}} |
Revision as of 05:56, 22 January 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)
.Information on iterator invalidation is copied from here |
The iterator pos
must be valid and dereferenceable. Thus the end() iterator (which is valid, but is not dereferencable) 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
Templated information. See page source. |
Complexity
Templated information. See page source. |
Example
Run this code
#include <{{{1}}}> #include <iostream> #include <iterator> int main( ) { std::{{{1}}}<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for (auto &i : c) { std::cout << i << " "; } std::cout << '\n'; c.erase(c.begin()); for (auto &i : c) { std::cout << i << " "; } std::cout << '\n'; 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); for (auto &i : c) { std::cout << i << " "; } std::cout << '\n'; // 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; } } for (auto &i : c) { std::cout << i << " "; } std::cout << '\n'; }
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}}} )
|