Afin d'utiliser les bibliothèques vectorielles et d'algorithmes, le programme C ++ doit commencer:
#inclureCe tutoriel donne les bases de la recherche d'une valeur dans un vecteur C ++. Tous les code de ce tutoriel sont dans la fonction principale (), sauf indication contraire. Si le vecteur se compose de chaînes, utilisez la classe de chaîne; Et n'utilisez pas «const char *». Dans ce cas, la classe String doit également être incluse, comme ainsi:
#inclureContenu de l'article
Trouver
Inputiterator Restal (Inputiterator First, Inputiterator Last, const t & value);
Le code suivant utilise cette fonction pour savoir si la fleur, «Cornflower» fait partie d'une liste vectorielle de fleurs:
#inclureLa sortie est:
Fleur trouvée à l'indice: 5Toute la liste du vecteur a été la cible de la découverte. De la syntaxe de la fonction Find (), «First» est VTR.begin () dans le code, et «dernier» est vtr.end () dans le code. La valeur à rechercher à partir de la syntaxe de la fonction find () désignée par const-t & -value, est "Cornflower" dans le code.
La fonction find () scanne la liste des vecteurs depuis le début. S'il ne voit pas la valeur qu'il recherche, il atteindra la fin du vecteur. La fin du vecteur est officiellement VTR.end (), qui est juste au-delà du dernier élément. S'il ne voit pas la valeur qu'il recherche, il renverra l'itérateur pointant vers VTR.fin().
La valeur qu'il recherche peut être dans des endroits différents dans le même vecteur. Quand il voit la première des valeurs qu'il recherche, elle s'arrête là et renvoie l'itérateur qui pointe vers cette valeur.
Chaque valeur dans un vecteur a un index. La première valeur a l'index 0, correspondant à Vtr.commencer(). La deuxième valeur a l'index 1, correspondant à Vtr.begin () + 1. La troisième valeur a l'index 2, correspondant à Vtr.begin () + 2. La quatrième valeur a l'index 3, correspondant à Vtr.begin () + 3; et ainsi de suite. Ainsi, l'index de la première valeur trouvée est donné par:
it - vtr.commencer()Sensibilité à la casse
Trouver dans un vecteur est sensible à la casse. Si la valeur à trouver était «Cornflower» pour le programme ci-dessus, il n'aurait pas été trouvé, et VTR.end () aurait été retourné.
Plage dans les limites
La gamme ne doit pas nécessairement être le vecteur entier. Pour le programme ci-dessus, la plage aurait pu être de l'index 1 à l'index 4. C'est-à-dire de «vtr.begin () + 1 ”à« vtr.end () - 4 ”. «VTR.end () - 4 ”est obtenu en soustrayant de l'arrière, en gardant à l'esprit que VTR.end () est juste au-delà du tout dernier élément.
Lorsque toute la liste des vecteurs est la plage, testant si l'itérateur de retour est VTR.end () indique si la valeur a été trouvée ou non. Si l'itérateur de retour est vtr.end (), cela signifie que la valeur n'a pas été trouvée. Maintenant, lorsque la plage est plus petite, si l'itérateur de retour est le dernier élément de la plage choisie, cela signifie que la valeur n'a pas été trouvée ou c'est la dernière valeur de la plage.
Note: La recherche s'arrête au dernier élément de la plage choisie (plus petite), si la valeur n'a pas été trouvée dans cette plage, ou si la valeur trouvée, est le dernier élément de la plage choisie. Si la valeur trouvée était ce dernier élément, un itérateur pointant serait retourné. Si la valeur était trouvée avant, la recherche s'arrêterait à cet élément avant le dernier élément de la plage choisie. L'itérateur de cet élément avant serait retourné.
Le code suivant illustre ce schéma:
#inclureLa sortie est:
La fleur n'a pas été trouvée dans la gamme!Maintenant, "Cornflower" est à l'index 5, et "Kingcup" est à l'index 4. Le dernier élément de la petite plage choisie pour la recherche est "Kingcup". Ainsi, la condition de test correspondante est «it - vtr.begin () == 4 ”. Notez que les expressions, «Vtr.end () - 4 ”et« it - vtr.begin () == 4 ”chacun ayant 4, c'est juste une coïncidence.
Afin d'avoir "Cornflower" dans la petite plage de recherche, la condition de test correspondante devra être «IT - VTR.begin () == 5 ”. Le code suivant illustre ceci:
#inclureLa sortie est:
Fleur trouvée à l'indice: 5Plus d'un occurrence
Dans le programme suivant, «Cornflower» se produit en plus d'un endroit. Pour trouver tous les index des occurrences, utilisez une boucle pour continuer à rechercher, après l'occurrence précédente, jusqu'à la fin (VTR.end ()) du vecteur. Le programme est:
#inclureLa sortie est:
Fleur trouvée à l'indice: 1Trouver un entier
Un vecteur peut être composé d'entiers. Une première valeur entière peut être trouvée en utilisant la fonction find () (à partir de la bibliothèque d'algorithme). Le programme suivant illustre ceci:
#inclureLa sortie est:
Numéro trouvé à l'index: 2Prédicat
InputIterator Find_IF (Inputiterator First, Inputiterator Last, Predicat Pred);
La fonction ici est find_if () et pas seulement find (). Pred est le nom de la fonction qui donne les critères de recherche. Ce troisième argument ne prend que le nom de la fonction, sans arguments et sans parenthèses. Si la fonction de prédicat prend l'argument, alors dans la définition de la fonction, les paramètres des arguments sont donnés. Le programme suivant l'illustre, à la recherche du premier numéro pair dans la liste des vecteurs:
#inclureLa sortie est:
Numéro trouvé à l'index: 4Notez que tout le vecteur a été recherché, avec la gamme: «Vtr.begin (), vtr.fin()".
Le nom de la fonction prédicat ici est, fn. Il faut un argument, n un int. Alors que la fonction find_if () commence à scanner le vecteur du premier élément, il appelle la fonction de prédicat avec chaque numéro du vecteur comme argument. La numérisation s'arrête lorsqu'il atteint le premier élément du vecteur où le prédicat renvoie true.
Conclusion
La fonction Find () dans la bibliothèque d'algorithme existe dans quatre catégories, qui sont: trouver, trouver fin, trouver d'abord et trouver adjacent. Seule la catégorie, la recherche a été expliquée ci-dessus, et dans une large mesure. L'explication donnée ci-dessus est les bases de toutes les fonctions find () dans la bibliothèque d'algorithme. Find () Les fonctions traitent directement avec les itérateurs et traitent indirectement les index. Le programmeur doit savoir comment convertir Iterator en index et arithmétique générale de l'itérateur comme illustré ci-dessus.