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 depuis C++20)
(2)
iterator erase ( iterator position ) ;
(jusqu'à C++11)
iterator erase ( const_iterator position ) ;
(depuis C++11)
(constexpr depuis C++20)
(3)
iterator erase ( iterator first, iterator last ) ;
(jusqu'à C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(depuis C++11)
(constexpr depuis C++20)

Supprime les caractères spécifiés de la chaîne.

1) Supprime std:: min ( count, size ( ) - index ) caractères commençant à l'index index .
2) Supprime le caractère à la position .
Si position n'est pas un itérateur déréférençable sur * this , le comportement est indéfini.
3) Supprime les caractères dans la plage [ first , last ) .
Si first ou last n'est pas un itérateur valide sur * this , ou si [ first , last ) n'est pas une plage valide , le comportement est indéfini.

Table des matières

Paramètres

index - premier caractère à supprimer
count - nombre de caractères à supprimer
position - itérateur vers le caractère à supprimer
first, last - plage des caractères à supprimer

Valeur de retour

1) * this
2) Itérateur pointant vers le caractère immédiatement suivant le caractère effacé, ou end() si aucun caractère de ce type n'existe.
3) Itérateur pointant vers le caractère last pointé avant l'effacement, ou end() si aucun tel caractère n'existe.

Exceptions

1) std::out_of_range si index > size ( ) .
2,3) Ne lance rien.

Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).

Exemple

#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); // efface " An" en utilisant la surcharge (1)
    std::cout << "2) " << s << '\n';
    s.erase(std::find(s.begin(), s.end(), ' ')); // efface le premier ' '; surcharge (2)
    std::cout << "3) " << s << '\n';
    s.erase(s.find(' ')); // tronque à partir de ' ' jusqu'à la fin de la chaîne; surcharge (1)
    std::cout << "4) " << s << '\n';
    auto it = std::next(s.begin(), s.find('s')); // obtient un itérateur vers le premier 's'
    s.erase(it, std::next(it, 2)); // efface "sI"; surcharge (3)
    std::cout << "5) " << s << '\n';
}

Sortie :

1) This Is An Example
2) This Is Example
3) ThisIs Example
4) ThisIs
5) This

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applied to Behavior as published Correct behavior
LWG 27 C++98 la surcharge ( 3 ) n'effaçait pas le caractère last pointé, mais elle retournait
l'itérateur pointant vers le caractère immédiatement suivant ce caractère
retourne un itérateur
pointant vers ce caractère
LWG 428 C++98 la surcharge ( 2 ) exigeait explicitement que position soit valide, mais
SequenceContainer l'exige déréférençable (plus strict)
supprimé l'exigence
explicite
LWG 847 C++98 il n'y avait aucune garantie de sécurité des exceptions ajouté une garantie de sécurité
forte des exceptions

Voir aussi

efface le contenu
(fonction membre publique)