Comment trouvez-vous quelque chose dans un vecteur en c++?

Comment trouvez-vous quelque chose dans un vecteur en c++?
Le vecteur C ++ n'a pas de fonction de recherche. Cependant, la bibliothèque d'algorithmes a une fonction de recherche () de différents types qui peuvent être utilisés pour trouver quelque chose dans un vecteur C ++. La bibliothèque d'algorithmes possède quatre groupes de fonctions find () qui peuvent être classées comme find, find end, trouver d'abord et trouver adjacent.

Afin d'utiliser les bibliothèques vectorielles et d'algorithmes, le programme C ++ doit commencer:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

Ce 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:

#inclure

Contenu de l'article

  • trouver()
  • Trouver un entier
  • Prédicat
  • Conclusion

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:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

vectorvtr = "Dog Rose", "Honeysuckle", "Enchanter's Nightshade", "Columbine", "Kingcup", "Cornflower", "Water Avens", "Forget-Me-not";
vecteur :: iterator it = find (vtr.begin (), vtr.end (), "Cornflower");
si (it == vtr.fin())
couter<< "Flower was not found!" <autre
couter<< "Flower found at index: " << it - vtr.begin() <retour 0;

La sortie est:

Fleur trouvée à l'indice: 5

Toute 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:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

vectorvtr = "Dog Rose", "Honeysuckle", "Enchanter's Nightshade", "Columbine", "Kingcup", "Cornflower", "Water Avens", "Forget-Me-not";
vecteur :: iterator it = find (vtr.begin () + 1, vtr.end () - 4, "Cornflower");
si (it == vtr.fin())
couter<< "Flower was not found!" <sinon si (it - vtr.begin () == 4) // Dernier élément dans la plage choisie
if (* it == String ("Cornflower"))
couter<< "Flower found at index: " << it - vtr.begin() <autre
couter<< "Flower was not found in range!" <
autre
couter<< "Flower found at index: " << it - vtr.begin() <
retour 0;

La 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:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

vectorvtr = "Dog Rose", "Honeysuckle", "Enchanter's Nightshade", "Columbine", "Kingcup", "Cornflower", "Water Avens", "Forget-Me-not";
vecteur :: iterator it = find (vtr.begin () + 1, vtr.end () - 3, "Cornflower");
si (it == vtr.fin())
couter<< "Flower was not found!" <sinon si (it - vtr.begin () == 5)
if (* it == String ("Cornflower"))
couter<< "Flower found at index: " << it - vtr.begin() <autre
couter<< "Flower was not found in range!" <
autre
couter<< "Flower found at index: " << it - vtr.begin() <
retour 0;

La sortie est:

Fleur trouvée à l'indice: 5

Plus 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:

#inclure
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

VectorVtr = "Dog Rose", "Cornflower", "Enchanter's Nightshade", "Columbine", "Kingcup", "Cornflower", "Water Avens", "Cornflower";
vecteur :: iterator it = find (vtr.begin (), vtr.end (), "Cornflower");
tandis que (ça != VTR.fin())
if (* it == String ("Cornflower"))
couter<< "Flower found at index: " << it - vtr.begin() <it ++;

retour 0;

La sortie est:

Fleur trouvée à l'indice: 1
Fleur trouvée à l'indice: 5
Fleur trouvée à l'indice: 7

Trouver 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:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

vectorvtr = 1, 2, 3, 1, 2, 3, 1, 2, 3;
vecteur :: iterator it = find (vtr.begin (), vtr.end (), 3);
si (it == vtr.fin())
couter<< "Number was not found!" <autre
couter<< "Number found at index: " << it - vtr.begin() <retour 0;

La sortie est:

Numéro trouvé à l'index: 2
Pour la première occurrence de la valeur, 3.

Pré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:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
bool fn (int n)
if ((n% 2) == 0)
Retour Vrai;
autre
retourne false;

int main()

vectorvtr = 1, 3, 5, 7, 8, 9, 10, 11, 12;
vecteur :: iterator it = find_if (vtr.begin (), vtr.end (), fn);
si (it == vtr.fin())
couter<< "Number was not found!" <autre
couter<< "Number found at index: " << it - vtr.begin() <retour 0;

La sortie est:

Numéro trouvé à l'index: 4

Notez 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.