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.
3) Удаляет символы в диапазоне
[first, last).
Если
first или last не является допустимым итератором в *this или [first, last) не является допустимым диапазоном, поведение не определено.Параметры
| index | - | первый удаляемый символ |
| count | - | количество удаляемых символов |
| position | - | итератор на удаляемый символ |
| first, last | - | диапазон удаляемых символов |
Возвращаемое значение
1)
*this
2) Итератор, указывающий на символ, непосредственно следующий за удалённым, или
end(), если такого символа нет.
3) Итератор, указывающий на символ, на который указывал
last до удаления, или end(), если такого символа нет.Исключения
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 | гарантия безопасности исключений отсутствовала | добавлена гарантия строгой безопасности исключений |
См. также
| очищает содержимое (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/erase