std::erase, std::erase_if (std::basic_string)
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <string>
|
||
template< ..., class U > constexpr typename std::basic_string<...>::size_type erase( std::basic_string<...>& c, const U& value ); |
(1) | (начиная с C++20) |
template< ..., class Pred > constexpr typename std::basic_string<...>::size_type erase_if( std::basic_string<...>& c, Pred pred ); |
(2) | (начиная с C++20) |
1) Удаляет из контейнера все элементы, которые при сравнении равны
value. Эквивалентно
auto it = std::remove(c.begin(), c.end(), value);
auto r = c.end() - it;
c.erase(it, c.end());
return r;
2) Удаляет из контейнера все элементы, удовлетворяющие предикату
pred. Эквивалентно
auto it = std::remove_if(c.begin(), c.end(), pred);
auto r = c.end() - it;
c.erase(it, c.end());
return r;
Параметры
| c | — | контейнер, из которого удалять |
| value | — | значение, которое нужно удалить |
| pred | — | унарный предикат, который возвращаетtrue если элемент должен быть удалён. Определение функции предиката должно быть эквивалентно следующему:
Присутствие |
Возвращаемое значение
Количество удалённых элементов.
Сложность
Линейная.
Пример
Запустить этот код
#include <iomanip>
#include <iostream>
#include <string>
int main()
{
std::string word{"startling"};
std::cout << "Изначально, слово = " << std::quoted(word) << '\n';
std::erase(word, 'l');
std::cout << "После удаления 'l': " << std::quoted(word) << '\n';
auto erased = std::erase_if(word, [](char x)
{
return x == 'a' or x == 'r' or x == 't';
});
std::cout << "После удаления всех 'a', 'r' и 't': " << std::quoted(word) << '\n';
std::cout << "Количество удалённых символов: " << erased << '\n';
}
Вывод:
Изначально, слово = "startling"
После удаления 'l': "starting"
После удаления всех 'a', 'r' и 't': "sing"
Количество удалённых символов: 4
Смотрите также
| удаляет элементы, соответствующие определённым критериям (шаблон функции) |