For å bruke vektor- og algoritmebibliotekene, bør C ++ -programmet begynne med:
#inkludereDenne opplæringen gir det grunnleggende om å finne en verdi i en C ++ vektor. All kode i denne opplæringen er i hovedfunksjonen (), med mindre annet er angitt. Hvis vektoren består av strenger, bruk strengklassen; og ikke bruk "const char*". I dette tilfellet må strengklassen også inkluderes, slik:
#inkludereArtikkelinnhold
Finne
InputIterator Find (InputIterator First, InputIterator Last, Const T & Value);
Følgende kode bruker denne funksjonen for å vite om blomsten, "Cornflower" er blant en vektorliste over blomster:
#inkludereUtgangen er:
Blomst funnet ved indeks: 5Hele listen over vektoren har vært målet for funnet. Fra syntaksen til Find () -funksjonen er “First” VTR.Begynn () i koden, og “sist” er VTR.slutt () i koden. Verdien som skal sees etter fra Find () -funksjonssyntaxen betegnet med Const-T & -Value, er "Cornflower" i koden.
Finn () -funksjonen skanner vektorlisten fra begynnelsen. Hvis den ikke ser verdien den leter etter, vil den nå slutten av vektoren. Slutten av vektoren er offisielt VTR.slutt (), som er rett utenfor det siste elementet. Hvis den ikke ser verdien den leter etter, vil den returnere iteratoren som peker til VTR.slutt().
Verdien det leter etter kan være forskjellige steder i samme vektor. Når den ser den første av verdiene den leter etter, stopper den der og returnerer iteratoren som peker på den verdien.
Hver verdi i en vektor har en indeks. Den første verdien har indeks 0, tilsvarende VTR.begynne(). Den andre verdien har indeks 1, tilsvarende VTR.Begynn () + 1. Den tredje verdien har indeks 2, tilsvarende VTR.Begynn () + 2. Den fjerde verdien har indeks 3, tilsvarende VTR.begynn () + 3; og så videre. Så indeksen for den første verdien som er funnet er gitt av:
IT - VTR.begynne()Saksfølsomhet
Å finne i en vektor er tilfelle følsom. Hvis verdien som ble funnet var "Cornflower" for programmet ovenfor, ville det ikke blitt funnet, og VTR.slutt () ville blitt returnert.
Rekkevidde innenfor grenser
Rekkevidden må ikke nødvendigvis være hele vektoren. For programmet ovenfor kunne området ha vært fra indeks 1 til indeks 4. Det vil si fra “VTR.Begynn () + 1 ”til“ VTR.End () - 4 ”. “VTR.End () - 4 ”oppnås ved å trekke fra ryggen, med tanke på at VTR.slutt () er rett utenfor det aller siste elementet.
Når hele vektorlisten er området, tester du om returneratoren er VTR.slutt () indikerer om verdien ble funnet eller ikke. Hvis retureratoren er VTR.slutt (), det betyr at verdien ikke ble funnet. Når området er mindre, hvis retureratoren er det siste elementet i området valgt, betyr det at verdien enten ikke ble funnet, eller det er den siste verdien av området.
Merk: Søkestopp ved det siste elementet i det valgte (mindre) området, hvis verdien ikke ble funnet i det området, eller hvis verdien ble funnet, er det siste elementet i det valgte området. Hvis verdien som ble funnet var det siste elementet, ville en iterator som pekte på den bli returnert. Hvis verdien ble funnet før, ville søket stoppe ved det elementet før det siste elementet i det valgte området. Iteratoren av det elementet før ville bli returnert.
Følgende kode illustrerer denne ordningen:
#inkludereUtgangen er:
Blomsten ble ikke funnet i rekkevidde!Nå er "Cornflower" på indeks 5, og "Kingcup" er på indeks 4. Det siste elementet i det lille området valgt for søk er "Kingcup". Så den tilsvarende testtilstanden er “IT - VTR.begynn () == 4 ”. Legg merke til at uttrykkene, “VTR.Slutt () - 4 ”og“ It - VTR.begynn () == 4 ”hver som har 4, er bare tilfeldigheter.
For å ha "maisblomst" i det lille området søk, vil den tilsvarende testtilstanden måtte være "IT - VTR.begynn () == 5 ”. Følgende kode illustrerer dette:
#inkludereUtgangen er:
Blomst funnet ved indeks: 5Mer enn en forekomst
I det følgende programmet forekommer "Cornflower" på mer enn ett sted. For å finne alle indeksene i forekomstene, bruk en stundesløyfe for å fortsette søk, etter forrige forekomst, til slutten (VTR.end ()) av vektoren. Programmet er:
#inkludereUtgangen er:
Blomst funnet ved indeks: 1Finne heltall
En vektor kan bestå av heltall. En første heltallverdi finner du ved bruk av Find () -funksjonen (fra algoritmebiblioteket). Følgende program illustrerer dette:
#inkludereUtgangen er:
Antall funnet ved indeks: 2Predikat
InputIterator FIND_IF (InputIterator First, InputIterator Last, Predicate Pred);
Funksjonen her er find_if () og ikke bare finne (). Pred er navnet på funksjonen som gir søkekriteriene. Dette tredje argumentet tar bare funksjonsnavnet, uten argumenter og uten parenteser. Hvis predikatfunksjonen tar argument, blir parametrene for argumentene gitt i funksjonsdefinisjonen. Følgende program illustrerer dette, på jakt etter det første til og med nummeret i vektorlisten:
#inkludereUtgangen er:
Antall funnet ved indeks: 4Merk at hele vektoren er søkt, med området, “VTR.Begynn (), VTR.slutt()".
Predikatfunksjonsnavnet her er, fn. Det krever ett argument, n en int. Når Find_if () -funksjonen begynner å skanne vektoren fra det første elementet, kaller den predikatfunksjonen med hvert tall i vektoren som argument. Skanning stopper når det når det første elementet i vektoren der predikatet returnerer sant.
Konklusjon
Finn () -funksjonen i algoritmebiblioteket eksisterer i fire kategorier, som er: Finn, finn slutt, finn først og tilstøtende funn. Bare kategorien, funn er blitt forklart ovenfor, og i stor grad. Forklaringen gitt ovenfor er basene for alle funn () -funksjonene i algoritmebiblioteket. Finn () funksjoner omhandler iteratorer direkte og håndterer indekser indirekte. Programmereren må vite hvordan man konverterer iterator til indeks og generell iterator aritmetikk som illustrert ovenfor.