Пространства имён
Варианты
Действия

std::erase, std::erase_if (std::basic_string)

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
erase(std::basic_string)erase_if(std::basic_string)
(C++20)(C++20)
Ввод/Вывод
Сравнение
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Числовые преобразования
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Вспомогательные классы
 
Определено в заголовочном файле <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 если элемент должен быть удалён.

Определение функции предиката должно быть эквивалентно следующему:

 bool pred(const Type &a);

Присутствие const & в определении не обязательно, но функция не должна модифицировать передаваемые ей объекты.
Тип Type должен быть таков, что объект типа CharT может быть неявно преобразован в Type. ​

[править] Возвращаемое значение

Количество удалённых элементов.

[править] Сложность

Линейная.

[править] Пример

#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

[править] Смотрите также

удаляет элементы, соответствующие определённым критериям
(шаблон функции) [править]