std::erase,...asic_string)(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸŽ€ std::erase,...asic_string)(3) β€” C++ Standard Libary πŸŽ€

okay bestie, this is the page for std::erase,std::erase_if(std::basic_string) from the C++ Standard Libary, and it’s literally the β€œdelete the things you don’t want from a string” duo. no cap, the vibes are useful. πŸ’–


πŸ’… NAME πŸ’…

std::erase,std::erase_if(std::basic_string) β€” yup, that’s the name twice, bestie: std::erase,std::erase_if(std::basic_string). iconic behavior, honestly. 🫢

✨ Synopsis ✨

Defined in header <string> β€” write that down. πŸ“

template< class CharT, class Traits, class Alloc, class U >

constexpr std::basic_string<CharT, Traits, Alloc>::size_type
       (since C++20)
                                                                                 (until
       C++26)
              erase( std::basic_string<CharT, Traits, Alloc>& c, const
          U& value );
          template< class CharT, class Traits, class Alloc, class U =
          CharT >

          constexpr std::basic_string<CharT, Traits, Alloc>::size_type   (1)
       (since C++26)

              erase( std::basic_string<CharT, Traits, Alloc>& c, const
          U& value );
          template< class CharT, class Traits, class Alloc, class Pred >

          constexpr std::basic_string<CharT, Traits, Alloc>::size_type
       (2) (since C++20)

              erase_if( std::basic_string<CharT, Traits, 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 = c.end() - it;
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 = c.end() - it;
c.erase(it, c.end());
return r;

πŸ’– Parameters πŸ’–

  • c β€” container from which to erase.
  • value β€” value to be removed.
  • pred β€” unary predicate which returns true if the element should be erased.
    • The expression pred(v) must be convertible to bool for every argument v of type (possibly const) CharT, regardless of value category, and must not modify v.
    • Thus, a parameter type of CharT& is not allowed, nor is CharT unless for CharT a move is equivalent to a copy (since C++11).
This is the part where the compiler is like β€œbestie, read the predicate rules,” so don’t try to sneak in a CharT& unless you want chaos. πŸ’€

🌈 Return value 🌈

The number of erased elements. That’s it β€” it’s literally counting the deleted girlies. πŸ’…

πŸ¦‹ Complexity πŸ¦‹

Linear. Periodt. ✨

🧚 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 πŸ“

Run this code, bestie:

// Run this code

#include <iomanip>
#include <iostream>
#include <string>

int main()
{
    std::string word{"startling"};
    std::cout << "Initially, word = " << std::quoted(word) << '\n';

    std::erase(word, 'l');
    std::cout << "After erase 'l': " << std::quoted(word) << '\n';

    auto erased = std::erase_if(word, [](char x)
    {
        return x == 'a' or x == 'r' or x == 't';
    });

    std::cout << "After erase all 'a', 'r', and 't': " <<
std::quoted(word) << '\n';
    std::cout << "Erased symbols count: " << erased << '\n';
}

🌸 Output 🌸

Initially, word = "startling"
After erase 'l', word = "starting"
After erase all 'a', 'r', and 't': "sing"
Erased symbols count: 4

πŸ‘‘ See also πŸ‘‘

  • remove β€” removes elements satisfying specific criteria.
  • remove_if β€” function template.

πŸ’– That’s the tea! Source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::erase,...asic_string)(3) πŸ’–

πŸ“¦ where this page comes from