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 seit C++20) |
| (2) | ||
|
iterator erase
(
iterator position
)
;
|
(bis C++11) | |
|
iterator erase
(
const_iterator position
)
;
|
(seit C++11)
(constexpr seit C++20) |
|
| (3) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(bis C++11) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(seit C++11)
(constexpr seit C++20) |
|
Entfernt bestimmte Zeichen aus der Zeichenkette.
2)
Entfernt das Zeichen an
position
.
3)
Entfernt die Zeichen im Bereich
[
first
,
last
)
.
Wenn
first
oder
last
kein
gültiger Iterator
auf
*
this
ist, oder
[
first
,
last
)
kein
gültiger Bereich
ist, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| index | - | erster zu entfernender Zeichen |
| count | - | Anzahl der zu entfernenden Zeichen |
| position | - | Iterator zum zu entfernenden Zeichen |
| first, last | - | Bereich der zu entfernenden Zeichen |
Rückgabewert
1)
*
this
2)
Iterator, der auf das Zeichen unmittelbar nach dem gelöschten Zeichen zeigt, oder
end()
falls kein solches Zeichen existiert.
3)
Iterator, der auf das Zeichen zeigt,
last
auf das vor dem Löschen gezeigt wurde, oder
end()
falls kein solches Zeichen existiert.
Exceptions
2,3)
Wirft nichts.
Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).
Beispiel
Diesen Code ausführen
#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'; }
Ausgabe:
1) This Is An Example 2) This Is Example 3) ThisIs Example 4) ThisIs 5) This
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 27 | C++98 |
Überladung
(
3
)
löschte nicht das Zeichen
last
, auf das gezeigt wurde, sondern gab
den Iterator zurück, der auf das unmittelbar folgende Zeichen zeigt |
gibt einen Iterator zurück,
der auf dieses Zeichen zeigt |
| LWG 428 | C++98 |
Überladung
(
2
)
forderte explizit, dass
position
gültig sein muss, aber
SequenceContainer erfordert, dass es dereferenzierbar ist (strenger) |
entfernte die
explizite Anforderung |
| LWG 847 | C++98 | es gab keine Ausnahmesicherheitsgarantie |
führte starke Ausnahme-
sicherheitsgarantie hinzu |
Siehe auch
|
löscht den Inhalt
(öffentliche Elementfunktion) |