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;
}
Output
$ ./src/c++20/build/std-erase-std-erase_if
Removed 1 element(s).
Removed 1 element(s).
_helper