Namespaces
Variants

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

From cppreference.net
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 bestimmte Zeichen aus der Zeichenkette.

1) Entfernt std:: min ( count, size ( ) - index ) Zeichen beginnend bei index .
2) Entfernt das Zeichen an position .
Wenn position kein dereferenceable iterator auf * this ist, ist das Verhalten undefiniert.
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

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

Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).

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

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)