Summing vektorelementer i C ++

Summing vektorelementer i C ++
Den åpenbare måten å oppsummere elementene i en vektor er å legge dem til en-for-en som begynner fra den første. Det er faktisk ingen annen måte, som har en fordel i forhold til dette, alt er likt. Og slik kan den klassiske For-loop brukes til å oppsummere elementene i en vektor; Den rekkeviddebaserte formatingen kan brukes til å oppsummere elementene i en vektor; For_each () -funksjonen som er 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.

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:

vektor VTR = 1.1, 2.2, 3.3, 4.4, 5.5;

For å 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:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

VectorVtr = 1.1, 2.2, 3.3, 4.4, 5.5;
Float Sum = 0.0;
for (int i = 0; isum += vtr [i];
cout<< sum <retur 0;

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

vektor VTR = 1, 2, 3, 4, 5;

For å 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) uttalelse

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

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

VectorVtr = 1, 2, 3, 4, 5;
int sum = 0;
for (int var: VTR)
sum += var;
cout<< sum <retur 0;

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

mal
contexpr -funksjon for_each (InputIterator First, InputIterator Last, Function F);

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

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
vektor VTR = 1, 2, 3, 4, 5;
int sum = 0;

Vektor- 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)
sum += 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 (VTR.Begynn (), VTR.end (), fn);
cout << sum << endl;
retur 0;

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:

mal
constExpr t akkumuleres (inputiterator først, inputIterator sist, t init);

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

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

VectorVtr = 1, 2, 3, 4, 5;
int sum = akkumuleres (VTR.Begynn (), VTR.end (), 0);
cout<< sum <retur 0;

Utgangen er 15; riktig!

Vektor av flottører

Følgende program oppsummerer alle elementene i en vektor av flottører:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

VectorVtr = 1.1, 2.2, 3.3, 4.4, 5.5;
Float Sum = Akkumulere (VTR.Begynn (), VTR.slutt (), 0.0);
cout<< sum <retur 0;

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

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

VectorVtr = 1.1, 2.2, 3.3, 4.4, 5.5;
Float Sum = Akkumulere (VTR.Begynn (), VTR.end (), 0);
cout<< sum <retur 0;

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