Aby użyć bibliotek wektora i algorytmu, program C ++ powinien zacząć od:
#włączaćTen samouczek zawiera podstawy znalezienia wartości w wektorze C ++. Cały kod w tym samouczku znajdują się w funkcji Main (), chyba że wskazano inaczej. Jeśli wektor składa się z ciąży, użyj klasy String; i nie używaj „const char*”. W takim przypadku należy również uwzględnić klasę ciągów, jak:
#włączaćTreść artykułu
Znajdować
Inputiterator Find (inputiterator First, Inputiterator Last, const t & wartość);
Poniższy kod używa tej funkcji, aby wiedzieć, czy kwiat „Cornflower” jest jednym z wektorowej listy kwiatów:
#włączaćWyjście to:
Kwiat znaleziony na indeksie: 5Cała lista wektora była celem odkrycia. Z składni funkcji Find () „Pierwsza” to VTR.początek () w kodzie, a „last” to VTR.end () w kodzie. Wartość, której należy szukać z składni funkcji FINK (.
Funkcja Find () skanuje listę wektorów od samego początku. Jeśli nie zobaczy wartości, której szuka, dotrze do końca wektora. Koniec wektora jest oficjalnie VTR.end (), który jest tuż poza ostatnim elementem. Jeśli nie zobaczy wartości, której szuka, zwróci iterator wskazujący na VTR.koniec().
Wartość, której szuka, może znajdować się w różnych miejscach w tym samym wektorze. Kiedy zobaczy pierwszą z wartości, których szuka, zatrzymuje się i zwraca iterator, który wskazuje na tę wartość.
Każda wartość w wektorze ma indeks. Pierwsza wartość ma indeks 0, odpowiadający VTR.zaczynać(). Druga wartość ma indeks 1, odpowiadający VTR.początek () + 1. Trzecia wartość ma indeks 2, odpowiadający VTR.początek () + 2. Czwarta wartość ma wskaźnik 3, odpowiadający VTR.początek () + 3; i tak dalej. Tak więc indeks pierwszej znalezionej wartości jest podany przez:
It - vtr.zaczynać()Rozróżnianie wielkości liter
Znalezienie w wektorze jest wrażliwe na przypadki. Gdyby znaleziono wartość „Cornflower” dla powyższego programu, nie zostałby znaleziony i VTR.end () zostałby zwrócony.
Zakres w granicach
Zakres niekoniecznie musi być cały wektor. Dla powyższego programu może być od indeksu 1 do indeksu 4. To znaczy „vtr.początek () + 1 ”do„ VTR.end () - 4 ”. „Vtr.end () - 4 ”uzyskuje się przez odejmowanie od tyłu, mając na uwadze, że vtr.end () jest tuż poza ostatnim elementem.
Kiedy cała lista wektorów jest zakresem, testowanie, czy iterator powrotny to VTR.end () wskazuje, czy wartość została znaleziona, czy nie. Jeśli iterator powrotny to VTR.end (), oznacza to, że wartość nie została znaleziona. Teraz, gdy zakres jest mniejszy, jeśli iterator powrotny jest ostatnim elementem wybranego zakresu, oznacza to, że wartość albo nie znaleziono lub jest ostatnią wartością zakresu.
Notatka: Wyszukiwanie zatrzymuje się w ostatnim elemencie wybranego (mniejszego) zakresu, jeśli wartość nie została znaleziona w tym zakresie, lub jeśli znaleziona wartość jest ostatnim elementem wybranego zakresu. Gdyby znaleziono wartość ten ostatni element, iterator wskazujący na niego, zostałby zwrócony. Gdyby wartość była wcześniej znaleziona, wyszukiwanie zatrzymałoby się na tym elemencie przed ostatnim elementem wybranego zakresu. Iterator tego elementu wcześniej zostanie zwrócony.
Poniższy kod ilustruje ten schemat:
#włączaćWyjście to:
Kwiat nie został znaleziony w zasięgu!Teraz „Cornflower” znajduje się w indeksie 5, a „Kingcup” znajduje się w indeksie 4. Ostatnim elementem w małym zakresie wybranym do wyszukiwania jest „Kingcup”. Tak więc odpowiadającym warunkiem testowym jest „to - vtr.początek () == 4 ”. Zauważ, że wyrażenia „VTR.end () - 4 ”i„ It - vtr.początek () == 4 ”każdy ma 4, to po prostu zbieg okoliczności.
Aby mieć „Cornflower” w niewielkim zakresie wyszukiwania, odpowiednią warunek testu będzie musiał być „to - vtr.początek () == 5 ”. Poniższy kod to ilustruje:
#włączaćWyjście to:
Kwiat znaleziony na indeksie: 5Więcej niż jedno zdarzenie
W poniższym programie „Cornflower” występuje w więcej niż jednym miejscu. Aby znaleźć wszystkie indeksy wystąpień, użyj pętli while, aby kontynuować wyszukiwanie, po poprzednim wystąpieniu, do końca (VTR.end ()) wektora. Program to:
#włączaćWyjście to:
Kwiat znaleziony na indeksie: 1Znalezienie liczby całkowitej
Wektor może składać się z liczb całkowitych. Pierwszą wartość całkowitą można znaleźć za pomocą funkcji FINK () (z biblioteki algorytmu). Poniższy program ilustruje to:
#włączaćWyjście to:
Liczba znaleziona na indeksie: 2Orzec
Inputiterator Find_if (inputiterator najpierw, Inputiterator Last, predykate pred);
Funkcja tutaj to Find_if (), a nie tylko znajdź (). Pred to nazwa funkcji, która podaje kryteria wyszukiwania. Ten trzeci argument przyjmuje tylko nazwę funkcji, bez argumentów i bez nawiasów. Jeśli funkcja predykatu przyjmuje argument, to w definicji funkcji podano parametry argumentów. Poniższy program ilustruje to, szukając pierwszej parzystej liczby na liście wektorów:
#włączaćWyjście to:
Liczba znaleziona w indeksie: 4Zauważ, że cały wektor został przeszukany z zakresem „VTR.początek (), vtr.koniec()".
Nazwa funkcji predykatu jest tutaj, fn. Wymaga jednego argumentu, n int. Gdy funkcja Find_if () zaczyna skanować wektor z pierwszego elementu, wywołuje funkcję predykatu z każdym numerem w wektorze jako argument. Skanowanie zatrzymuje się, gdy dotrze do pierwszego elementu w wektorze, w którym predykat powraca prawdziwie.
Wniosek
Funkcja FINK () w bibliotece algorytmu istnieje w czterech kategoriach, które są: Znajdź, znajdź koniec, znajdź pierwszy i sąsiednie znajdź. Tylko kategoria, znaleziono powyżej i w dużej mierze. Wyjaśnienie podane powyżej to podstawy wszystkich funkcji Find () w bibliotece algorytmu. FINK () Funkcje radzą sobie bezpośrednio z iteratorami i pośrednio z indeksami. Programator musi wiedzieć, jak przekonwertować iterator na indeks i ogólny arytmetyka iterator, jak pokazano powyżej.