std::basic_string<CharT,Traits,Allocator>:: erase
From cppreference.net
<
cpp
|
string
|
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) |
|
Удаляет указанные символы из строки.
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); // удаляет " 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 | не было гарантии безопасности исключений |
добавлена строгая гарантия
безопасности исключений |
Смотрите также
|
очищает содержимое
(публичная функция-член) |