Maison > développement back-end > C++ > le corps du texte

Comment fonctionne std::remove en C et quelle est la différence entre std::remove et std::erase ?

DDD
Libérer: 2024-10-30 02:42:02
original
582 Les gens l'ont consulté

How does std::remove in C   function, and what is the difference between std::remove and std::erase?

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";
}
Copier après la connexion

Le résultat sera :

Using iter...
2
2

Using size...
2
2
Copier après la connexion

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());
Copier après la connexion

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 :

  • Identifier la dernière occurrence d'un élément : en supprimant toutes les occurrences sauf le dernier, vous pouvez utiliser l'itérateur renvoyé par Remove pour identifier l'apparence finale.
  • Création d'une nouvelle séquence avec des éléments uniques : en supprimant les éléments en double, vous pouvez générer une nouvelle séquence contenant uniquement les éléments distincts.
  • Partitionner une séquence en deux parties : en utilisant Remove, vous pouvez partitionner une séquence en deux segments, l'un contenant des éléments correspondants et l'autre contenant des éléments non correspondants.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!