std::inplace_vector<T,N>::erase
constexpr iterator erase( const_iterator pos );
|
(1) | (depuis C++26) |
constexpr iterator erase( const_iterator first, const_iterator last );
|
(2) | (depuis C++26) |
Efface les éléments spécifiés du conteneur.
pos.[first, last).Les itérateurs (y compris l'itérateur end()) et les références aux éléments situés au point d'effacement ou après sont invalidés.
L'itérateur pos doit être valide et déréférençable. Ainsi, l'itérateur end() (qui est valide mais n'est pas déréférençable) ne peut pas être utilisé comme valeur pour pos.
L'itérateur first n'a pas besoin d'être déréférençable si first == last : effacer un intervalle vide est une opération nulle.
Paramètres
| pos | - | itérateur vers l'élément à supprimer |
| first, last | - | la paire d'itérateurs définissant l'intervalle des éléments à supprimer |
| Exigences de type | ||
-
T
n'est pas
MoveAssignable
, le comportement est indéfini.
|
||
Valeur de retour
Itérateur suivant le dernier élément supprimé.
[
first
,
last
)
est une plage vide, alors
last
est retourné.
Exceptions
Ne lance pas sauf si une exception est levée par l'opérateur d'assignation de
T
.
Complexité
Linéaire : le nombre d'appels au destructeur de
T
est le même que le nombre d'éléments effacés, l'opérateur d'affectation de
T
est appelé un nombre de fois égal au nombre d'éléments dans le vecteur après les éléments effacés.
Notes
Lorsque des éléments d'un conteneur doivent être effacés en fonction d'un prédicat, plutôt que d'itérer sur le conteneur et d'appeler unaire erase, la surcharge de plage d'itérateurs est généralement utilisée avec std::remove()/std::remove_if() pour minimiser le nombre de déplacements des éléments restants (non supprimés), — c'est l'idiome erase-remove.
std::erase_if() remplace l'idiome erase-remove.
Exemple
#include <inplace_vector>
#include <print>
int main()
{
std::inplace_vector<int, 26> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::println("{}", v);
v.erase(v.begin());
std::println("{}", v);
v.erase(std::next(v.begin(), 2), std::next(v.begin(), 5));
std::println("{}", v);
// Erase all even numbers
for (auto it{v.begin()}; it != v.end();)
if (*it % 2 == 0)
it = v.erase(it);
else
++it;
std::println("{}", v);
}
Sortie:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 6, 7, 8, 9]
[1, 7, 9]
Voir aussi
|
efface tous les éléments satisfaisant des critères spécifiques
(modèle de fonction) |
|
|
vide le contenu
(fonction membre publique) |