Suppression des doublons de vecteurs non triés : une promenade avec les algorithmes STL
Face à la tâche d'éliminer les éléments en double d'un vecteur non trié tout en en préservant l'ordre initial, il est tentant de se lancer dans une approche itérative, en suivant et en supprimant fastidieusement les entrées indésirables. Mais attendez, il existe un meilleur moyen : un chemin pavé d'algorithmes STL.
L'échelle STL pour la suppression des doublons
STL dispose d'un puissant arsenal d'algorithmes, y compris std ::copy_if, méticuleusement conçu pour de tels scénarios. Cette potion magique prend une source itérable (comme votre vecteur), une destination (où vous souhaitez que les doublons disparaissent) et un prédicat pour guider le processus de sélection.
Création du détecteur de doublons
La clé pour débloquer les prouesses de std::copy_if réside dans la création d'un prédicat personnalisé qui détecte les doublons. Ici, nous introduisons NotDuplicate, un objet fonction qui insère avec empressement des éléments dans un ensemble et utilise le principe sacré selon lequel « un ensemble ne peut pas tous les contenir ». Il renvoie gracieusement false lorsqu'un élément a déjà été rencontré.
Le Swift Swipe de l'algorithme
Avec notre fidèle prédicat NotDuplicate en main, nous pouvons invoquer std::copy_if pour parcourir élégamment notre vecteur. Chaque élément est présenté à NotDuplicate, qui consulte son ensemble d'éléments vus et n'accorde le passage qu'aux nouveaux arrivants de bonne foi. Les survivants uniques glissent dans le conteneur de destination, laissant les doublons périr dans le vide numérique.
Un aperçu de la grâce du Code
Jetons un coup d'œil dans les coulisses de notre solution élégante :
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
Cet extrait de code vierge appelle NotDuplicate pour aider std::copy_if, en parcourant rapidement votre vecteur et en tissant une nouvelle tapisserie sans doublon.
En C 11's Embrace
Si vous avez la chance de bénéficier de la douce étreinte de C 11, vous pouvez libérer le pouvoir captivant des lambdas et orner votre code d'une touche d'élégance succincte :
std::vector<int> uniqueNumbers; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), [](const int& element) { return s_.insert(element).second; // true if s_.insert(element); });
À retenir : les algorithmes, vos alliés fidèles
N'oubliez pas que le but des algorithmes STL n'est pas de vous transformer en un assistant d'algorithme mais d'augmenter vos prouesses en programmation. Adoptez leur riche éventail de fonctionnalités et vous vous retrouverez à libérer tout le potentiel de votre code avec facilité et efficacité.
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!