Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

std::erase/std::erase_if (uniform container erasure)

Use case

Simplified container element removal.

Explanation

Before C++20: v.erase(std::remove_if(v.begin(), v.end(), pred), v.end()). Now just std::erase_if(v, pred).

Code

#include <iostream>
#include <string>
#include <vector>

int main() {
  std::vector<std::string> symbols{"_main", "__stub_helper", "_helper"};

  auto n = std::erase(symbols, "_main");

  std::cout << "Removed " << n << " element(s).\n";

  n = std::erase_if(
      symbols, [](const std::string &s) { return s.starts_with("__stub"); });

  std::cout << "Removed " << n << " element(s).\n";

  for (const auto &s : symbols) {
    std::cout << s << "\n";
  }

  return 0;
}

View on GitHub.

Output

$ ./src/c++20/build/std-erase-std-erase_if
Removed 1 element(s).
Removed 1 element(s).
_helper