Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: erase

From cppreference.net
std::basic_string
basic_string & erase ( size_type index = 0 , size_type count = npos ) ;
(1) (constexpr начиная с C++20)
(2)
iterator erase ( iterator position ) ;
(до C++11)
iterator erase ( const_iterator position ) ;
(начиная с C++11)
(constexpr начиная с C++20)
(3)
iterator erase ( iterator first, iterator last ) ;
(до C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(начиная с C++11)
(constexpr начиная с C++20)

Удаляет указанные символы из строки.

1) Удаляет std:: min ( count, size ( ) - index ) символов, начиная с позиции index .
2) Удаляет символ в position .
Если position не является разыменуемым итератором для * this , поведение не определено.
3) Удаляет символы в диапазоне [ first , last ) .
Если first или last не является действительным итератором для * this , или если [ first , last ) не является допустимым диапазоном , поведение не определено.

Содержание

Параметры

index - первый символ для удаления
count - количество символов для удаления
position - итератор на удаляемый символ
first, last - диапазон символов для удаления

Возвращаемое значение

1) * this
2) Итератор, указывающий на символ, следующий непосредственно за удалённым символом, или end() если такого символа не существует.
3) Итератор, указывающий на символ last , на который указывал до стирания, или end() , если такого символа не существует.

Исключения

1) std::out_of_range если index > size ( ) .
2,3) Ничего не выбрасывает.

Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).

Пример

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    std::string s = "This Is An Example";
    std::cout << "1) " << s << '\n';
    s.erase(7, 3); // удаляет " An" используя перегрузку (1)
    std::cout << "2) " << s << '\n';
    s.erase(std::find(s.begin(), s.end(), ' ')); // удаляет первый пробел; перегрузка (2)
    std::cout << "3) " << s << '\n';
    s.erase(s.find(' ')); // обрезает от пробела до конца строки; перегрузка (1)
    std::cout << "4) " << s << '\n';
    auto it = std::next(s.begin(), s.find('s')); // получает итератор на первую 's'
    s.erase(it, std::next(it, 2)); // удаляет "sI"; перегрузка (3)
    std::cout << "5) " << s << '\n';
}

Вывод:

1) This Is An Example
2) This Is Example
3) ThisIs Example
4) ThisIs
5) This

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Исправленное поведение
LWG 27 C++98 перегрузка ( 3 ) не удаляла символ last , но возвращала
итератор, указывающий на символ сразу после этого символа
возвращает итератор
, указывающий на этот символ
LWG 428 C++98 перегрузка ( 2 ) явно требовала, чтобы position был действительным, но
SequenceContainer требует, чтобы он был разыменовываемым (строже)
удалено явное
требование
LWG 847 C++98 не было гарантии безопасности исключений добавлена строгая гарантия
безопасности исключений

Смотрите также

очищает содержимое
(публичная функция-член)