Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::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.

1) Entfernt std::min(count, size() - index) Zeichen, beginnend bei index.
2) Entfernt das Zeichen an position.
Wenn position kein dereferenzierbarer Iterator auf *this ist, ist das Verhalten undefiniert.
3) Entfernt die Zeichen im Bereich [firstlast).
Wenn first oder last kein gültiger Iterator auf *this ist oder [firstlast) 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

1) std::out_of_range, wenn index > size().
2,3) Wirft nichts.

Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).

[edit] Beispiel

#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) [edit]