Med de tre første metodene som er nevnt ovenfor, må uttalelser skrives for å faktisk gjøre summeringen. Med akkumuleringsmetoden gjør akkumuleringsfunksjonen () summeringen uten ytterligere summeringserklæringer. Disse fire metodene er illustrert i denne artikkelen. For å kode en vektor i et C ++ -program, Vector Library for å bli inkludert i programmet.
Artikkelinnhold
- Legge til vektorelementer ved hjelp av for-loop
- Legge til vektorelementer ved hjelp av den rekkevidde-baserte for-uttalelsen
- Legge til vektorelementer ved hjelp av for_each () -funksjonen
- Legge til vektorelementer ved bruk av akkumuleringsfunksjonen ()
- Konklusjon
Legge til vektorelementer ved hjelp av for-loop
Tenk på vektoren:
vektorFor å legge til alle disse elementene fra begynnelsen, må en sumvariabel, som opprinnelig har verdien av null, erklæres som følger:
Float Sum = 0.0;Fra indeks null til den siste indeksen blir hver verdi lagt til summen i en for-loop. Følgende program illustrerer dette:
#inkludereUtgangen er 16.5 som forventet. Legg merke til at vektorbiblioteket var inkludert, og standardnavnet ble brukt.
Legge til vektorelementer ved hjelp av den rekkevidde-baserte for-uttalelsen
Tenk på følgende vektor av heltall:
vektorFor å legge til alle disse elementene fra begynnelsen, må en sumvariabel, som opprinnelig har verdien av null, erklæres som følger:
int sum = 0;Fra det første elementet i vektoren til det siste elementet, blir hver verdi lagt til summen i rekkevidden-baserte for-loop. Den rekkeviddebaserte for-compound-uttalelsen ligner på den for-sammensatte uttalelsen ovenfor. Parametrene til den rekkevidde-baserte for-loop er imidlertid forskjellige fra de klassiske for-loop (over).
Det er to parametere i parentesene til den rekkeviddebaserte for-loopen: den første er en variabel erklæring som refererer til neste element i vektoren, som begynner fra den første. Den erstatter VTR [i], av den klassiske for-loop ovenfor. Den andre parameteren er navnet på vektoren. Syntaksen til den rekkevidde-baserte for-sammensatte uttalelsen, er
for (init-statement-Optional for-range-DECLARASION: for-range-initializer) uttalelseDen rekkeviddebaserte for-loopen er en variant av den klassiske for-loopen; Det er mer praktisk å bruke i iterating over lister. Den variable erklæringen er før tykktarmen, og navnet på vektoren er etter tykktarmen. Følgende program viser den rekkeviddebaserte For-Compound-uttalelsen i aksjon:
#inkludereUtgangen er 15. Merk: Navnet på variabelen, VAR, er valget av programmereren. I den posisjonen refererer det til neste element (verdi) i vektoren.
Legge til vektorelementer ved hjelp av for_each () -funksjonen
For_each () -funksjonen er i algoritmebiblioteket. Syntaksen er:
malDet første argumentet er en iterator som peker på starten (første elementet) i vektoren. Det andre argumentet er en iterator som peker på slutten (like etter det siste elementet) av samme vektor. Det tredje argumentet er bare navnet på funksjonen som har koden for å gjøre summeringen. Denne funksjonen er et funksjonsobjekt.
For_each () -funksjonen brukes som en funksjonsanrop, som vil sende hvert element i vektoren, fra første til en annen funksjon, f. Funksjonen, F vil gjøre alt det vil gjøre med elementet i funksjonskroppen. Hvert element i vektoren er et argument for funksjonen, f. Programmereren definerer funksjonen, f og kan gi den navnet annet enn f (). Parameteren for denne funksjonen må være av typen av hvert av vektorelementene (alle vektorelementer er av samme type). Navnet på parameteren er programmererens valg. Så, for_each () -funksjonen kaller funksjonen, f () for hvert vektorelement.
Programmet for å bruke FOR_EACH () -funksjonen skal begynne som følger:
#inkludereVektor- og algoritmebibliotekene er inkludert. Den initialiserte vektoren og den initialiserte summen av null er erklært. En god summeringsfunksjonsdefinisjon for F, som følger i programmet, kan være:
void fn (int var)Hver gang funksjonen blir kalt av FOR_EACH () -funksjonen, legges den neste verdien av vektoren til sum. C ++ hovedfunksjonen kan være som følger:
int main ()For_each () -funksjonen kalles en gang fra algoritmebiblioteket. Det første argumentet er en iterator som peker på begynnelsen av vektoren; Andre argument peker på slutten av vektoren; Og tredje argument er navnet på funksjonsobjektet, som kalles for hvert element i vektoren. Etter at antall samtaler, som tilsvarer antall vektorelementer, er blitt utført, skriver den neste uttalelsen i hovedfunksjonen ut den endelige summen.
Legge til vektorelementer ved bruk av akkumuleringsfunksjonen ()
Syntaksen til akkumuleringsfunksjonen til det numeriske biblioteket () er:
malMed denne funksjonen er det ikke behov for programmereren å skrive kode (uttalelser) for summering. Akkumuleringsfunksjonen () gjør summeringen. Det første argumentet er en iterator som peker på begynnelsen av vektoren. Det andre argumentet er en iterator som peker mot slutten av vektoren. Det siste argumentet er den opprinnelige sumverdien. Det skal være null for en vektor av INTS, og 0.0 for en vektor av floats (eller dobler). Funksjonen returnerer summen.
Vektor av heltall
Følgende program oppsummerer alle elementene i en vektor av heltall:
#inkludereUtgangen er 15; riktig!
Vektor av flottører
Følgende program oppsummerer alle elementene i en vektor av flottører:
#inkludereUtgangen er 16.5; riktig!
Problem med akkumuleringsfunksjonen
Hvis det tredje argumentet for akkumuleringsfunksjonen er feil type, ville summen være feil. For eksempel, hvis elementene er flyter, og det tredje argumentet er 0 (heltall), vil summen ignorere alle desimaldelene av verdiene for å ha en INT -sum. Følgende program illustrerer dette:
#inkludereUtgangen er 15; feil!
Konklusjon
Den klassiske For-loop kan brukes til å oppsummere elementene i en vektor. Den rekkeviddebaserte formatingen kan brukes til å oppsummere elementene i en vektor. For_each () -funksjonen inkludert fra algoritmebiblioteket kan brukes til å oppsummere elementene i en vektor. Akkumuleringsfunksjonen () som er inkludert fra det numeriske biblioteket, kan brukes til å oppsummere elementene i en vektor. Bare pass på feil bruk av det tredje argumentet.