Spec-Zone.ru › C++

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

basic_string& erase( size_type index = 0, size_type count = npos );
(1) (constexpr since C++20)
iterator erase( iterator position );
(2) (до C++11)
iterator erase( const_iterator position );
(начиная с C++11)
(constexpr начиная с C++20)
iterator erase( iterator first, iterator last );
(3) (до 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); // 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/cpp/string/basic_string/erase

Spec-Zone.ru

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