C ++ std_funksjon

C ++ std_funksjon

I C ++ betyr STD standard. C ++ kan ha en definert klasse som objekter blir instantiert. En normal definert funksjon, er som en klasse. Funksjonssamtalen er som et objekt til den definerte funksjonsklassen. En funksjonsanrop, til forskjellige tider, med forskjellige argumenter, er som forskjellige funksjonsobjekter. Nå har C ++ forhåndsdefinerte funksjonsklasser der forskjellige funksjonsobjekter kan bli offisielt instantiert. Et funksjonsobjekt kan også brukes, som en funksjonssamtale. Det kan være et tilbakeringingsfunksjonsargument i en annen funksjonsanrop. Et funksjonsobjekt kan ta plassen til en peker til en normal funksjon.

STD :: -funksjonen er en funksjonsprototype -erklæring med navnet, funksjonen () i overskriften, på biblioteket. Dette betyr at for å bruke std :: funksjon, må OR -overskriften inkluderes i programmet. STD :: -funksjonen er også en innpakning som tar et funksjonsobjekt som argument, for å produsere et annet funksjonsobjekt.

Denne artikkelen forklarer C ++ std :: funksjon, som begynner med noen forhåndsdefinerte funksjonsklasser.

Artikkelinnhold

- Noen forhåndsdefinerte funksjonsklasser

- STD :: Transform

- std :: funksjon riktig

- Konklusjon

Noen forhåndsdefinerte funksjonsklasser

Den funksjonelle overskriften har mange forhåndsdefinerte funksjonsklasse -prototyper, i kategoriene, Reference_wrapper, aritmetiske operasjoner, sammenligninger, klasse Compare_three_way, logiske operasjoner, bitvise operasjoner, bind, polymorf funksjonsinnpakning, søker og klassemal hasj.

I den aritmetiske kategorien er to av funksjonsklasse -prototypene:

mal struktur negere;
og
mal struct Plus;

Merk: En struktur er en slags klasse. Den første ville negere tall i en liste. Den andre vil legge til tilsvarende tall på to lister sammen, noe som resulterte i en liste over tilleggene.

STD :: Transform

Det er STD :: Transform () -funksjonen i algoritmebiblioteket. Denne funksjonen vil ta begynnelsen og slutten av en vektor og bruke Negate -funksjonsobjektet for å negere alle elementene i vektoren. Negate Function -objektet er det siste argumentet i Transform () -funksjonsanropet. En prototype (syntaks) er:

mal
ConstExpr OutputIterator Transform (InputIterator First1, InputIterator Last1,
OutputIterator -resultat, unaryoperation op);

der outputIterator er en andre vektor for de resulterende negerte tallene. OutputIterator blir også returnert.

Følgende program viser bruken av syntaks:

#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
vektor vtr1 = 1, 2, 3, 4, 5;
VectorVtrout (5);
int main ()

Transform (VTR1.Begynn (), VTR1.slutt (), vtrout.begynn (), negate ());
for (int i = 0; icout<cout<retur 0;

Utgangen er:

-1 -2 -3 -4 -5

Direktivene inkluderer IOSTREAM, algoritme, funksjonelle og vektoroverskrifter. Standard navneområde brukes. Inngangs- og utgangsvektorene er av samme størrelse. STD :: Transform () -funksjonen brukes uten, returnerer, siden returposten er et transformasjonsfunksjonsargument. For-loop skriver ut de negerte tallene ved utgangen. En returpunkt for transformasjonsfunksjonen ville blitt kodet som følger:

Vtrout.Begynn () = Transform (VTR1.Begynn (), VTR1.slutt (), vtrout.Begynn (), negere());

I en overbelastet form vil transformasjonsfunksjonen () ta begynnelsen og slutten av en vektor. Deretter starten på en annen vektor, og bruk A Plus -funksjonsobjektet til å legge til de tilsvarende tallene for de to vektorene for å ha en ny vektor med summer. Plussfunksjonsobjektet er det siste argumentet i transformasjonsfunksjonssamtalen, for dette formålet. Prototypen (syntaks) er:

malKlasseutganger, klasse BinaryOperation>
constExpr OutputIterator Transform (InputIterator1 First1, InputIterator1 Last1,
InputIterator2 First2, OutputIterator Resultat, BinaryOperation Binary_OP);

der outputIterator er en tredje vektor for de resulterende sumnumrene. OutputIterator blir også returnert, men dette trenger ikke å implementeres. Se følgende program:

#inkludere
#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
vektor vtr1 = 1, 2, 3, 4, 5;
vektor vtr2 = 10, 20, 30, 40, 50;
VectorVtrout (5);
int main ()

Transform (VTR1.Begynn (), VTR1.End (), VTR2.Begynn (), Vtrout.begynn (), pluss ());
for (int i = 0; icout<cout<retur 0;

Utgangen er:

11 22 33 44 55

Direktivene inkluderer IOSTREAM, algoritme, funksjonelle og vektoroverskrifter. Standard navneområde brukes. De to inngangene og en utgangsvektorer, har samme størrelse. STD :: Transform () -funksjonen brukes uten, returnerer, siden returposten er et transformasjonsfunksjonsargument. For-loop skriver ut de oppsummerte tallene ved utgangen.

std :: funksjon riktig

Alt det ovennevnte har forklart hvordan du bruker et funksjonsobjekt, profesjonelt. Det er mulig for programmereren å skrive sin egen funksjon som Transform () -funksjonen og bruke sitt eget funksjonsobjekt som han har skrevet.

std :: funksjon er ikke en stor sak. Det er en innpakning som vil ta ethvert funksjonsobjekt som argument. Denne delen av artikkelen illustrerer hvordan du lager et enkelt funksjonsobjekt, og har den pakket inn i std :: funksjon.

Et funksjonsobjekt er et kallbart objekt. Et kallbart objekt er ethvert objekt som kan brukes som en funksjon. Et eksempel på en funksjonsklasse, vises i følgende kode:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
struct structFn
int operator () (int a, int b)
int c = a + b;
return c;

;
Structfnfn

Dette er den øverste delen av programmet, som bare mangler C ++ hovedfunksjonen. En struktur er som en klasse. Denne koden har definisjonen av en struktur, kalt structFN (tilsvarer klassenavn). Strukturen har bare ett medlem, som er parentesoperatøren. En operatør er noe en funksjon. Denne funksjonen tar to heltall som argumenter, og returnerer et annet heltall. Det returnerer faktisk summen av de to heltallene. Struct, structfn er en funksjonsobjekttype.

Det instantierte objektet til strukturen, structfn er fn. “STD :: funksjon” i seg selv, er en annen type (klasse). Den siste uttalelsen i ovennevnte kode, instantierer et objekt av STD :: Funksjon (der STD :: er utelatt fordi den er i "Bruke navneområde std;"). Navnet på standardobjektet for "std :: funksjon", er f. “F ()” er en objektkonstruktør. I dette tilfellet er det eneste argumentet, FN, som er et objekt for funksjonsklassen, Structfn. Denne siste uttalelsen pakker funksjonsobjektet.

Operatøren (funksjonen) til funksjonsklassen (struct), har to argumenter av typer int og int. Det returnerer en annen int. Denne signaturfunksjonene kan representeres som: int (int, int). Det er grunnen til at malens spesialisering, av funksjonskonstruksjonen, er .

Syntaks for funksjonskonstruktøren, brukt ovenfor, er:

mal klassefunksjon;

Resten av programmet, er C ++ Main () -funksjonen. Det er:

int main ()

int z = f (2, 3);
cout << z << endl;
retur 0;

Utgangen er 5. F (2,3) ble brukt i stedet for FN (2,3).

Fordelen med std :: funksjon er at det kan ta ethvert funksjonsobjekt, når argumentene og returtypen, av funksjonen som er tatt, er kjent.

Ovennevnte funksjonsobjekt kan modifiseres, for å brukes som en tilbakeringing av plussfunksjoner, i transformasjonsfunksjonssamtalen.

Konklusjon

STD :: -funksjonen er av den funksjonelle overskriften, som må inkluderes i programmet for at det skal brukes. Det pakker inn et funksjonsobjekt. Funksjonsobjektet må være dets argument (av STD :: funksjonskonstruksjon). Et funksjonsobjekt er et kallbart objekt. Et kallbart objekt er ethvert objekt som kan brukes som en funksjon. Fordelen med std :: funksjon er at det kan ta hvilken som helst funksjon, når argumentene og returtypen, av funksjonen som er tatt, er kjent.