Spec-Zone.ru › C++

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

(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) Удаляет символы в диапазоне [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); // erases " An" using overload (1)
    std::cout << "2) " << s << '\n';
 
    s.erase(std::find(s.begin(), s.end(), ' ')); // erases first ' '; overload (2)
    std::cout << "3) " << s << '\n';
 
    s.erase(s.find(' ')); // trims from ' ' to the end of the string; overload (1)
    std::cout << "4) " << s << '\n';
 
    auto it = std::next(s.begin(), s.find('s')); // obtains iterator to the first 's'
    s.erase(it, std::next(it, 2)); // erases "sI"; overload (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 не было гарантии устойчивости к исключениям добавлена гарантия
сильной устойчивости к
исключениям

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/erase

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API