Passerer en vektor som referanse i C ++

Passerer en vektor som referanse i C ++
For å forstå hva det vil si å passere en vektor med henvisning til en funksjon i C ++, er det bra å først forstå hva en referanse er generelt.

Henvisning

Tenk på følgende kode:

char var = 'y';
char & ref = var;
ref = 'z';
cout << var << " << ref << endl;

Utgangen er: z z

Den første uttalelsen i koden begynner med erklæringen og tildelingen til Char -variabelen, VAR, verdien, 'y'. Den andre uttalelsen har en andre variabel kalt ref. Det er fremdeles av type, røye. Her er det imidlertid & symbolet mellom røye og variabelen, ref. Det spiller ingen rolle om og er nærmere røye eller ref.

Til Ref er tildelt variabelen, var. Hva betyr dette? På grunn av & mellom char og ref, blir ref og var alternative navn for samme minneplass som har karakteren, 'y'. Nå kan enten Ref eller VaR brukes til å endre verdien på minneplassen. Når det skjer, ville både VAR og REF returnere samme verdi. I koden ovenfor ble Ref brukt til å endre verdien.

I følgende kode endres innholdet i samme minneplassering, referert til av VAR og Ref, gjennom VAR:

char var = 'y';
char & ref = var;
var = 'z';
cout << var << " << ref << endl;

Utgangen er den samme: z z

En referansevariabel er et synonym for en original variabel. Den opprinnelige variabelen i seg selv, er fremdeles en referanse.

Det kan være mer enn én referanse til en original variabel, da følgende kode viser:

char var = 'y';
char & ref1 = var;
char & ref2 = var;
ref2 = 'z';
cout << var << " << ref1 << " << ref2 << endl;

Utgangen er: z z z

For å ha en referanse, tilordne en original variabel til en ny variabel; I erklæringen om den nye variabelen, har og mellom typen og den nye variabelen.

Fordelen med å bruke referansevariabel er at det bare er en kopi av verdien i minnet, for de forskjellige variabelnavnene (synonymer). Med normal programmering i C ++, hvis de forskjellige minneplasseringene ikke er nødvendig, og hver variabel har sitt eget minneplass, med samme verdi, vil dette være sløsing med minne.

Vektor og referanse

Vektor er en klasse som vektorobjekter opprettes fra (instantiert). For å bruke vektorklassen, må vektorbiblioteket inkluderes i programmet. Det er den opprinnelige vektorobjektvariabelen. Til dette kan andre referanse (synonym) variabler assosieres. Å lage en vektorreferansevariabel gjøres ved erklæring som med ovennevnte grunnleggende objekt (røye). Følgende program illustrerer dette:

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

vektor VTR;
vektor & VTRREF1 = VTR;
vektor & VTRREF2 = VTR;
retur 0;

Vektorbiblioteket er inkludert i programmet. En vektor av strenger er ment, så strengbiblioteket er også inkludert. Legg merke til bruken og plasseringen av og i den andre og tredje vektorklæringen. Alle tre vektorobjektvariabler, VTR, VTRREF1 og VTRREF2 er synonymer eller referanser til samme minneplassering.

VTRREF1 og VTRREF2 brukes i et program på samme måte som VTR, uten foregående noe med &. Med andre ord, VTR [5], VTRREF1 [5] og VTRREF2 [5] Verden returnerer samme verdi som ligger på samme minneplassering.

Fordelen med å bruke en referansevektor

Innholdet i et vektorobjekt kan være veldig langt. Det er vanligvis ikke ønskelig å ha flere kopier av den samme lange listen i minnet. Fra tid til annen er det ønskelig å ha to referanser av samme vektor i minnet. Dette er spesielt nyttig når du sender en vektor til en funksjon. Hvis vektoren ikke sendes ved referanse (eller peker), vil det være to kopier av samme vektor i minnet i programmet. Det vil si at funksjonskroppen vil ha en kopi av vektoren i minnet som er forskjellig fra den opprinnelige vektoren utenfor funksjonskroppen. En måte å unngå slike to eksemplarer, men fremdeles har to variabler, er å passere ved referanse. På denne måten vil variabelen i funksjonskroppen, og variabelen utenfor funksjonskroppen begge referere til den samme vektoren.

Passerer en vektor med henvisning til en funksjon

Det er enkelt å passere en vektor med henvisning til en funksjon. For å gjøre dette, ha den opprinnelige vektoren utenfor funksjonen; La parameteren for funksjonsdefinisjonen være erklæringen til vektoren med Ampers-and (&), mellom vektortypen og parameternavnet. Parameternavnet på vektoren og det opprinnelige navnet på vektoren kan være annerledes. Det opprinnelige navnet på vektoren er argumentet for funksjonssamtalen. På denne måten er vektornavnet i funksjonskroppen, og vektortavnet utenfor funksjonskroppen, to forskjellige navn som refererer til den samme vektoren.

Se for deg en vektor av dyrenavn. Overskriften for programmet ville være:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;

Vektoren utenfor funksjonen kan være:

vektor dyr = "tiger", "ulv", "løve", "sjiraff", "bjørn";

Funksjonen av interesse kan være:

tomrom FN (vektor & vtr)
for (int i = 0; icout << vtr[i] << ", ";
cout << endl;

På dette tidspunktet er navnet på vektoren utenfor funksjonen dyr, og navnet på vektoren inne i funksjonen er VTR. Begge navnene refererer til det samme vektorobjektet i minnet. Hvis noe element i vektoren endres inne i funksjonen, vil endringen sees i vektorvariabelen utenfor funksjonen. Hvis noe element i vektoren endres utenfor funksjonen, vil endringen sees i vektorvariabelen inne i funksjonen. Det er ikke gjort noen slik endring i dette programmet. Funksjonen viser ganske enkelt bare vektorinnholdet, som er det samme inne i funksjonen og utenfor funksjonen. Legg merke til bruken og plasseringen av symbolet, og i parametererklæringen. C ++ hovedfunksjonen kan være:

int main ()

fn (dyr);
retur 0;

Variabeltnavnet på vektoren utenfor funksjonen er argumentet for funksjonssamtalen. Utgangen er:

tiger, ulv, løve, sjiraff, bjørn,

Merk: Så snart funksjonen begynner å utføre, blir følgende uttalelse fremsatt i funksjonen:

vektor & VTR = dyr;

Denne erklæringen er veldig lik en grunnleggende objektserklæring ovenfor, som er:

char & ref = var;

Konklusjon

Et normalt navn og det refererte navnet på en vektor er begge synonymer av samme vektor. Dette betyr at de refererer til det samme minneplassen. For å gi en vektor til en funksjon som referanse, må parameterdeklarasjonen til vektoren i parentesen til funksjonen ha og mellom vektortypen og vektortavnet. Dette navnet i parentesene er offisielt det refererte navnet. Ved funksjonsanropet blir det normale navnet på den opprinnelige vektorvariabelen utenfor funksjonsdefinisjonen funksjonen til funksjonen. De to navnene kan være forskjellige. Innenfor funksjonsdefinisjonen, og ikke gikk foran vektornavnet.