std::erase,...std::deque)(3)
okay so bestie, welcome to the std::erase,...std::deque)(3) page from the C++ Standard Libary manual (yes, βLibaryβ β the typo is canon, we donβt fix it π
). This is all about std::erase and std::erase_if for std::deque, and Iβm gonna walk you through it like weβre in the group chat. No cap, every detail is here. β¨
β¨ NAME β¨
std::erase, std::erase_if (std::deque) β the dynamic duo for wiping elements out of a std::deque. Literally their whole personality. π«Ά
πΈ Synopsis πΈ
Defined in header <deque> β got it? π
So there are like three overloads / versions, and the vibes are:
template< class T, class Alloc, class U > (since C++20) (until C++26)
std::deque<T, Alloc>::size_type
erase( std::deque<T, Alloc>& c, const U& value );
template< class T, class Alloc, class U = T > (1) (since C++26)
std::deque<T, Alloc>::size_type
erase( std::deque<T, Alloc>& c, const U& value );
template< class T, class Alloc, class Pred > (2) (since C++20)
std::deque<T, Alloc>::size_type
erase_if( std::deque<T, Alloc>& c, Pred pred );
Okay so overload (1) is the erase one, and overload (2) is the erase_if one. Slay. π
Now the tea β:
- Erases all elements that compare equal to
valuefrom the container. Equivalent to:
auto it = std::remove(c.begin(), c.end(), value);
auto r = c.end() - it;
c.erase(it, c.end());
return r;
- Erases all elements that satisfy the predicate
predfrom the container. Equivalent to:
auto it = std::remove_if(c.begin(), c.end(), pred);
auto r = c.end() - it;
c.erase(it, c.end());
return r;
π Parameters π
cβ container from which to erase. The main character. πvalueβ value to be removed. Bye bestie. πpredβ unary predicate which returnstrueif the element should be erased. The expressionpred(v)must be convertible toboolfor every argumentvof type (possibly const)T, regardless of value category, and must not modifyv. Thus, a parameter type ofT&is not allowed, nor isTunless forTa move is equivalent to a copy (since C++11). No cap, thatβs the rule. π
π₯ Return value π₯
The number of erased elements. Literally just a count of how many got yeeted. ποΈ
π Complexity π
Linear. So itβs giving O(n) but make it fashion. β¨
π Notes π
Hereβs the feature-test macro tea:
- Feature-test macro:
__cpp_lib_algorithm_default_value_type - Value:
202403 - Std:
(C++26) - Feature: List-initialization for algorithm (1)
π Example π
Okay so run this code, bestie:
// Run this code
#include <complex>
#include <iostream>
#include <numeric>
#include <string_view>
#include <deque>
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::deque<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::deque<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)
π source: http://cppreference.com β’ date: 2024.06.10 β’ page: std::erase,...std::deque)(3) π
Thatβs the whole vibe. Now go erase some elements, bestie. Periodt. π β¨
π¦ 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