std::erase,...orward_list)(3)
π NAME π
Bestie, this is the std::erase,std::erase_if(std::forward_list) page from the C++ Standard Library manual. Itβs literally about erasing elements from a std::forward_list by value or by predicate. Iconic behavior, no cap. β¨
π¦ Synopsis π¦
Defined in header <forward_list>.
template< class T, class Alloc, class U >
std::forward_list<T, Alloc>::size_type
erase( std::forward_list<T, Alloc>& c, const U& value );
(1) since C++20, until C++26.
template< class T, class Alloc, class U = T >
std::forward_list<T, Alloc>::size_type
erase( std::forward_list<T, Alloc>& c, const U& value );
(1) since C++26.
template< class T, class Alloc, class Pred >
std::forward_list<T, Alloc>::size_type
erase_if( std::forward_list<T, Alloc>& c, Pred pred );
(2) since C++20.
- Erases all elements that compare equal to
valuefrom the container. Equivalent toreturn c.remove_if([&](auto& elem) { return elem == value; });. - Erases all elements that satisfy the predicate
predfrom the container. Equivalent toreturn c.remove_if(pred);.
πΈ Parameters πΈ
cβ container from which to erase.valueβ value to be removed.predβ unary predicate which returnstrueif the element should be erased.
The expression pred(v) must be convertible to bool for every argument v of type (possibly const) T, regardless of value category, and must not modify v. Thus, a parameter type of T& is not allowed, nor is T unless for T a move is equivalent to a copy (since C++11).
π Return value π
The number of erased elements.
β¨ Complexity β¨
Linear.
π¦ Notes π¦
Unlike std::forward_list::remove, erase accepts heterogeneous types and does not force a conversion to the containerβs value type before invoking the == operator.
Feature-test macro vibes:
Feature-test macro Value Std Feature
__cpp_lib_algorithm_default_value_type 202403 (C++26) List-initialization for algorithm (1)
π Example π
// Run this code
#include <complex>
#include <iostream>
#include <numeric>
#include <string_view>
#include <forward_list>
void println(std::string_view comment, const auto& c)
{
std::cout << comment << "{ ";
for (const auto& x : c)
std::cout << x << ' ';
std::cout << "}\n";
}
int main()
{
std::forward_list<char> cnt(10);
std::iota(cnt.begin(), cnt.end(), '0');
println("Initially, cnt = ", cnt);
std::erase(cnt, '3');
println("After erase '3', cnt = ", cnt);
auto erased = std::erase_if(cnt, [](char x) { return (x - '0') % 2 == 0; });
println("After erase all even numbers, cnt = ", cnt);
std::cout << "Erased even numbers: " << erased << '\n';
std::forward_list<std::complex<double>> nums{{2, 2}, {4, 2}, {4, 8}, {4, 2}};
#ifdef __cpp_lib_algorithm_default_value_type
std::erase(nums, {4, 2});
#else
std::erase(nums, std::complex<double>{4, 2});
#endif
println("After erase {4, 2}, nums = ", nums);
}
Output π
Initially, cnt = { 0 1 2 3 4 5 6 7 8 9 }
After erase '3', cnt = { 0 1 2 4 5 6 7 8 9 }
After erase all even numbers, cnt = { 1 5 7 9 }
Erased even numbers: 5
After erase {4, 2}, nums = { (2,2) (4,8) }
π See also π
removeβ removes elements satisfying specific criteriaremove_if(function template)removeβ removes elements satisfying specific criteriaremove_if(public member function)
π Thatβs the whole page, bestie β source/version/date: http://cppreference.com, 2024.06.10, manual page std::erase,...orward_list)(3). π«Ά
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms