std::erase() method
- since C++20
// prism-push-types:size_type
// (1)
template< class T, class Alloc, class U >
constexpr typename std::vector<T,Alloc>::size_type
erase( std::vector<T,Alloc>& c, U const& value )
// (2)
template< class T, class Alloc, class Pred >
constexpr typename std::vector<T,Alloc>::size_type
erase_if( std::vector<T,Alloc>& c, Pred pred );
- (1) Erases all elements that compare equal to value from the container. Equivalent to
auto it = std::remove(c.begin(), c.end(), value);
auto r = std::distance(it, c.end());
c.erase(it, c.end());
return r; - (2) Erases all elements that satisfy the predicate pred from the container. Equivalent to
auto it = std::remove_if(c.begin(), c.end(), pred);
auto r = std::distance(it, c.end());
c.erase(it, c.end());
return r;
Parameters
c
- container from which to erasevalue
- value to be removed the value to initialize the new elements withpred
- unary predicate which returnstrue
if the element should be erased The expressionpred(v)
must be convertible tobool
for every argumentv
of type (possiblyconst
)T
, regardless of value category, and must not modifyv
. Thus, a parameter type ofT&
is not allowed (nor isT
unless forT
a move is equivalent to a copy(since C++11)
).
Return value
The number of erased elements.
Complexity
Linear.
Exceptions
(none)
Example
Main.cpp
#include <iostream>
#include <numeric>
#include <string_view>
#include <vector>
void print_container(std::string_view comment, const std::vector<char>& c)
{
std::cout << comment;
for (auto x : c) {
std::cout << x << ' ';
}
std::cout << '\n';
}
int main()
{
std::vector<char> cnt(10);
std::iota(cnt.begin(), cnt.end(), '0');
print_container("Init:\n", cnt);
std::erase(cnt, '3');
print_container("Erase '3':\n", cnt);
auto erased = std::erase_if(cnt, [](char x) { return (x - '0') % 2 == 0; });
print_container("Erase all even numbers:\n", cnt);
std::cout << erased << " even numbers were erased.\n";
}
Output
Init:
0 1 2 3 4 5 6 7 8 9
Erase '3':
0 1 2 4 5 6 7 8 9
Erase all even numbers:
1 5 7 9
5 even numbers were erased.
This article originates from this CppReference page. It was likely altered for improvements or editors' preference. Click "Edit this page" to see all changes made to this document.
Hover to see the original license.
Hover to see the original license.