Hvordan bytter du vektorer i C++?

Hvordan bytter du vektorer i C++?
La Vtra = 'A', 'B', 'C', 'D', 'E';
La vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';

Hvis vtra blir 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' og

vtrb blir 'a', 'b', 'c', 'd', 'e'

Da har begge vektorene blitt byttet ut. At vektorene har forskjellige lengder, utgjør egentlig ikke et problem. For at to vektorer skal byttes, må de være av samme type.

Vektorklassen har en medlemsfunksjon for å bytte seg selv og en annen vektor. Algoritmebiblioteket har andre byttefunksjoner med forskjellige navn og for modifiserte formål. Hovedforskjellen mellom vektormedlemsbytte () -funksjonen og algoritmebyttefunksjonene er at mens medlemsfunksjonen bytter vektor med en annen vektor, bytter algoritmebibliotekets byttefunksjoner, hver bytter to uavhengige vektorer.

Vektormedlemsfunksjonen, SWAP (), vil bli diskutert i denne artikkelen, og algoritmebibliotekets byttefunksjoner vil også bli diskutert. All vektorkode gjøres i hoved () -funksjonen for denne artikkelen med mindre annet er angitt.

Artikkelinnhold

  • Vektormedlem Swap () -funksjon
  • Iterere med iteratorer i stedet for indekser
  • Bytt ved å bytte iteratorer
  • Område
  • Bytteområde med hele vektoren
  • Konklusjon

Vektormedlem Swap () -funksjon
tomrom (vektor og)

I det følgende programmet er to vektorer erklært og deres totale innhold byttes:

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

vektor vtra = 'a', 'b', 'c', 'd', 'e';
vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.SWAP (VTRB);
for (int i = 0; icout << vtrA[i] << ";

cout << endl;
for (int i = 0; icout << vtrB[i] << ";

cout << endl;
retur 0;

Utgangen er:

F g h i j k l m
A B C D E

Det totale innholdet i begge vektorene er byttet ut. Vektorbiblioteket må inkluderes for å bruke en vektor i C ++, med direktivet: #include .

I programmet og i Main () -funksjonen erklærer det første segmentet de to vektorene. Neste kodesegment av en linje som er,

vtra.SWAP (VTRB);

bytter begge vektorene. Det er tydelig at SWAP (VTRB) er en medlemsfunksjon av vektoren, VTRA. De to kodesegmentene som kommer etter visning av det byttede innholdet.

Iterere med iteratorer i stedet for indekser

En vektor kan itereres med iteratorer i stedet for indeksen. Følgende program viser hvordan dette kan gjøres for det byttede vektorinnholdet:

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

vektor vtra = 'a', 'b', 'c', 'd', 'e';
vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.SWAP (VTRB);
for (vektor:: iterator p = vtra.begynne(); p != vtra.slutt(); P ++)
cout << *p << ";

cout << endl;
for (vektor:: Iterator Q = VTRB.begynne(); q != VTRB.slutt(); q ++)
cout << *q << ";

cout << endl;
retur 0;

Utgangen er:

F g h i j k l m
A B C D E

Legg merke til hvordan den viktigste iteratoren initialiseres i hver for-loop. Legg merke til mens-betingelsen i hver for-loop. Den viktigste iteratoren i hver for-loop økes akkurat som indeksen.

Bytt ved å bytte iteratorer

Algoritmebiblioteket har en byttefunksjon kalt ITER_SWAP (). Denne funksjonen bytter de to viktigste iteratorene av to uavhengige vektorer. Syntaksen er:

void Iter_swap (ForwardIterator1 A, ForwardIterator2 B)

Følgende program viser hvordan denne algoritme-iter_swap () -funksjonen, kan brukes:

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

vektor vtra = 'a', 'b', 'c', 'd', 'e';
vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vektor:: iterator u = vtra.begynne();
vektor:: Iterator V = VTRB.begynne();
Swap (u, v);
for (u = u; u != VTRB.slutt(); u ++)
cout << *u << ";

cout << endl;
for (v = v; v != vtra.slutt(); v ++)
cout << *v << ";

cout << endl;
retur 0;

Utgangen er:

F g h i j k l m
A B C D E

Merk at algoritmebiblioteket måtte inkluderes. Det kjente kodesegmentet for dette programmet er:

vektor:: iterator u = vtra.begynne();
vektor:: Iterator V = VTRB.begynne();
Swap (u, v);

For den første av disse utsagnene peker u på 'A' av vektoren, VTRA. For den andre uttalelsen peker V på 'F' av vektoren, VTRB. Den tredje uttalelsen bytter pekingen. Med det peker du nå på 'F' av VTRB og V peker på 'A' av VTRA. du kan nå brukes til å iterere gjennom elementene i VTRB, og V kan nå brukes til å iterere gjennom elementene i VTRA.

Område

For vektoren,

'F', 'g', 'h', 'i', 'j', 'k', 'l', 'm'

sekvensen,

'H', 'i', 'J', 'K'

er et område.

Iterasjonene for dette området, kan fås som følger:

vektor vtr = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vektor:: Iterator ITB = VTR.begynne();
ITB ++; ITB ++;
vektor:: iterator ite = VTR.slutt();
ite--; ite--; ite--;
cout << *itB << " << *itE << endl;

Utgangen er:

H k

Uttrykket, VTR.Begynn (), returnerer en iterator som peker på 'F'. Uttrykket, VTR.slutt (), returnerer en iterator som peker rett etter det siste elementet i vektoren. Iteratoren må økes to ganger for å gjøre iteratoren som peker på 'F' for å peke på 'H'. For å gjøre iteratoren som peker, rett utenfor vektoren, for å peke på 'K', at iteratoren må dekrementeres tre ganger og ikke to ganger. Når det reduseres første gang, peker det på det siste elementet, 'M'. Når den er dekrent for andre gang, peker det på elementet før, 'L'. Og når den er dekrementert tredje gang, peker det på elementet, 'K'. *ITB returnerer verdien av elementet ITB var sist pekt på. *ITE returnerer verdien av elementet ITE var sist pekt på.

Så rekkevidden, av iteratorer, er:

[ITB, ITE)

')' På slutten av rekkevidden betyr notasjonen at hvis området skal monteres i en annen vektor eller byttet med en annen vektor, vil den siste verdien av området, representert av ITE, ikke være involvert. Det vil si bare elementer fra ITB til den rett før, ITE vil bli kopiert eller byttet ut.

Bytteområde med hele vektoren

Algoritmebiblioteket har en funksjon for å bytte et område i en vektor med en annen hel vektor. Syntaks for funksjonen er:

ForwardIterator2 SWAP_RANGES (ForwardIterator1 First1, ForwardIterator1 Last1, Forwarditerator2 First2)

First1 representerer iteratoren som peker på det første elementet i området. Last1 representerer iteratoren som peker på det siste elementet i området. Dette siste elementet er bare en avgrenser; det vil ikke være involvert i byttet. First2 peker på det første elementet i innsettingsvektoren. Funksjonen returnerer en iterator som peker på neste element, ikke bytter hele vektoren - se følgende kode. Følgende program illustrerer dette bytte med SWAP_Ranges () -funksjonen.

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

vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vektor:: Iterator ITB = VTRB.begynne();
ITB ++; ITB ++;
vektor:: iterator ite = vtrb.slutt();
ite--; ite--; ite--;
vektor vtra = 'a', 'b', 'c', 'd', 'e';
vektor:: iterator itr = swap_ranges (itb, ite, vtra.begynne());
for (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
for (int i = 0; icout << vtrA[i] << ";
cout << endl;
retur 0;

Utgangen er:

F g a b c k l m
D
H i j d e

Legg merke til at hele vektoren ikke er byttet ut. I stedet er det bare de tre første verdiene av hele vektoren som har blitt byttet, med den tredje, fjerde og femte verdien av VTRB. Det sjette elementet i VTRB var ikke involvert, og det var forventet.

VTRA har 5 elementer, mens VTRB har 8 elementer. For å virkelig bytt hele vektoren, VTRA av 5 elementer, trenger sekvensen i VTRB berørt, å ha 6 elementer (med det sjette elementet bare en avgrenser). Følgende program illustrerer dette:

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

vektor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vektor:: Iterator ITB = VTRB.begynne();
ITB ++; ITB ++;
vektor:: iterator ite = vtrb.slutt();
ite--;
vektor vtra = 'a', 'b', 'c', 'd', 'e';
vektor:: iterator itr = swap_ranges (itb, ite, vtra.begynne());
for (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
for (int i = 0; icout << vtrA[i] << ";
cout << endl;
retur 0;

Utgangen er:

F g a b c d e m
H i j k l

Denne gangen ble alle de 5 verdiene av VTRA byttet med den tredje, fjerde, femte, sjette og syvende verdier av VTRB. Så for å virkelig byttet en hel vektor, bør den lengre vektoren ha det tilsvarende antall elementer (i sekvens).

Konklusjon

Å bytte to vektorer betyr å utveksle innholdet i en vektor med den til en annen. For at vektorer skal byttes, må de være av samme type. C ++ har en medlemsfunksjon for å gjøre dette. Dette betyr at den ene vektorens bytte () medlemsfunksjon tar den andre vektoren som et argument, og deretter utveksler innholdet. Hvis programmereren vil ha flere byttefunksjoner, for eksempel å bytte iteratorer eller bytte et område i en vektor med den totale listen over en annen vektor, må han bruke algoritmiblioteket.