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

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

Материал из cppreference.com
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до 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)
Вспомогательные классы
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(1)
basic_string& erase( size_type index = 0, size_type count = npos );
(до C++20)
constexpr basic_string& erase( size_type index = 0, size_type count = npos );
(начиная с C++20)
(2)
iterator erase( iterator position );
(до C++11)
iterator erase( const_iterator position );
(начиная с C++11)
(до C++20)
constexpr iterator erase( const_iterator position );
(начиная с C++20)
(3)
iterator erase( iterator first, iterator last );
(до C++11)
iterator erase( const_iterator first, const_iterator last );
(начиная с C++11)
(до C++20)
constexpr iterator erase( const_iterator first, const_iterator last );
(начиная с C++20)

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

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

Параметры

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++:

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

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

очищает содержимое
(public функция-элемент) [править]