std::basic_string<CharT,Traits,Allocator>::erase
Von cppreference.com
< 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 angegebene Zeichen aus dem String.
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.Inhalt |
[edit] Parameter
| index | - | Erstes zu entfernendes Zeichen |
| zählt | - | Anzahl der zu entfernenden Zeichen |
| position | - | Iterator auf das zu entfernende Zeichen |
| first, last | - | Bereich der zu entfernenden Zeichen |
[edit] Rückgabewert
1) *this
2) Iterator, der auf das Zeichen unmittelbar nach dem entfernten Zeichen zeigt, oder end(), falls kein solches Zeichen existiert.
3) Iterator, der auf das Zeichen zeigt, auf das last vor dem Löschen gezeigt hat, oder end(), falls kein solches Zeichen existiert.
[edit] Ausnahmen
2,3) Wirft nichts.
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[edit] Beispiel
Führen Sie diesen Code aus
#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
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 27 | C++98 | Überladung (3) hat das Zeichen, auf das last gezeigt hat, nicht gelöscht, sondern sie hat zurückgegeben den Iterator, der auf das Zeichen unmittelbar nach diesem Zeichen zeigt |
Gibt einen Iterator zurück. auf dieses Zeichen zeigt |
| LWG 428 | C++98 | Überladung (2) erforderte explizit, dass position gültig ist, aber SequenceContainer erfordert, dass er dereferenzierbar ist (strenger) |
entfernte die explizite Anforderung |
| LWG 847 | C++98 | Es gab keine Ausnahmesicherheitsgarantie | starke Ausnahme hinzugefügt Garantie der Sicherheit |
[edit] Siehe auch
| leert den Inhalt (öffentliche Memberfunktion) |