std::hive<T,Allocator>::erase
iterator erase( const_iterator pos );
|
(1) | (depuis C++26) |
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 et les références à l'élément effacé sont invalidés. Si l'élément est le dernier élément du conteneur, l'itérateur end() est également invalidé. Les autres références et itérateurs ne sont pas affectés.
L'itérateur pos doit être valide et déréférençable. Ainsi, l'itérateur end() (qui est valide, mais 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 d'éléments à supprimer |
Valeur de retour
Itérateur suivant le dernier élément supprimé.
pos fait référence au dernier élément, alors l'itérateur end() est retourné.last == end() avant la suppression, alors l'itérateur end() mis à jour est retourné.[first, last) est un intervalle vide, alors last est retourné.Complexité
De plus, si des blocs actifs deviennent vides d'éléments à la suite de l'appel de fonction, — au pire linéaire par rapport au nombre de blocs d'éléments.
Notes
Lorsque les éléments du conteneur doivent être effacés sur la base d'un prédicat, plutôt que d'itérer sur le conteneur et d'appeler unary erase, la surcharge d'intervalle 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 <hive>
#include <print>
int main()
{
std::hive 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) | |
| efface le contenu (fonction membre publique) |