Comprendre la fonctionnalité de std::remove
En C, l'algorithme std::remove opère sur une séquence arbitraire représentée par deux forward itérateurs. Son objectif est de réorganiser les éléments dans la séquence, en faisant avancer les éléments qui ne correspondent pas. Contrairement à std :: Erase, Remove ne supprime pas physiquement les éléments du conteneur. Au lieu de cela, il les réorganise.
Exemple
Considérez l'extrait de code suivant :
std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout << "Using iter...\n"; for (; iter != endIter; ++iter) { std::cout << *iter << "\n"; } std::cout << "Using size...\n"; for (int i = 0; i < a.size(); ++i) { std::cout << a[i] << "\n"; }
Le résultat sera :
Using iter... 2 2 Using size... 2 2
Bien que Remove ait effectivement déplacé l'élément 2 vers l'avant, la taille du vecteur reste inchangée à 2 car la mémoire non initialisée n'a pas été supprimée.
Erase-Remove Idiom
L'idiome effacer-supprimer combine supprimer et effacer pour supprimer physiquement les éléments indésirables. Le code :
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
supprimerait l'élément 1 du vecteur et réduirait sa taille à 1.
Cas d'utilisation de std::remove
Bien que l'utilisation principale de delete soit dans l'idiome effacer-supprimer, il peut également être utilisé dans d'autres situations, telles que :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!