Hvordan endre et sett til en vektor i C ++

Hvordan endre et sett til en vektor i C ++
Et sett kan opprettes i C ++ som følger:
sett p = 'j', 'i', 'h', 'g', 'f';

Etter dette er det intern sortering og verdiene til settet blir ordnet som følger basert på standardinnstillingene:

'F', 'G', 'H', 'I', 'J'

Når settet blir konvertert til en vektor, opprettholdes dette nye arrangementet til det er endret. For å kode settet i et C ++ -program, må settbiblioteket inkluderes. For å kode vektoren i et C ++ -program, må vektorbiblioteket inkluderes.

Det er en rekke måter å endre et sett i en vektor på. Tre enkle måter blir forklart i denne artikkelen. To av disse metodene som skal forklares i denne artikkelen, omhandler medlemsfunksjonene til vektorklassen. Den andre metoden omhandler kopieringsfunksjonen til algoritmebiblioteket.

Spenner fra sett

En rekke elementer kan fås fra et sett. Dette området vil ikke inkludere det siste elementet som er angitt. Rekkevidden kommer ut i to iteratorer av samme type for et sett. Følgende program illustrerer dette:

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

sett st = 'j', 'i', 'h', 'g', 'f';
sett:: Iterator ITB = ST.begynne(); Sett :: Iterator ite = ST.slutt();
ITB ++; ite--;
for (sett:: iterator it = itb; den != it; det ++)
cout << *it << ", ";
cout << endl;
retur 0;

Utgangen er:

G, h, jeg,

Husk at verdiene i settet hadde blitt omorganisert i stigende rekkefølge basert på standardinnstillinger etter innsetting. Iteratoren ITB peker rett før det første elementet i det ombestilte settet med det første. Iteratoren ITE peker rett utenfor det siste elementet i det ombestilte settet med det første. “ITB ++” peker deretter på det andre elementet, mens “Ite-” peker deretter på det siste elementet for rekkevidden. Dette siste elementet vil ikke bli inkludert i området.

For-loop skriver ut rekkevidden, ['g', 'h', 'i' [, unntatt 'J' som det burde.

Når det gjelder å konvertere hele settet til en vektor, må hele settet av settet brukes. Så ITB eller ITE skal verken økes eller reduseres.

Rekkevidden Vector Constructor

Vektorkonstruktøren, som tar et område som argumenter, er:

mal
conslatexpr -vektor (inputIterator først, inputIterator sist, const allocator & = allocator ()));

Hvis det tredje argumentet ikke er gitt, velges standardverdien av C++. Sammenligning av denne syntaksen med ovennevnte kode, ville først være ITB og sist ville være ite.

Denne konstruktøren kan derfor brukes til å konvertere et sett til en vektor. Følgende program illustrerer dette:

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

sett st = 'j', 'i', 'h', 'g', 'f';
sett:: Iterator ITB = ST.begynne(); Sett :: Iterator ite = ST.slutt();
vektor VTR (ITB, ITE);
for (int i = 0; icout << vtr[i] << ", ";
cout << endl;
retur 0;

Utgangen er:

F, g, h, i, j,

sortert. Allocator -argumentet ble utelatt i koden. Den firkantede brakettene ble brukt til å oppnå verdiene til vektoren som var de sorterte verdiene fra settet.

Dette har vært en måte å konvertere eller endre et sett til en vektor. De to andre måtene blir forklart neste gang:

Vektor tildeler medlemsfunksjon

En av syntaksene for vektortilordningen () medlemsfunksjonen er:

mal
ConstExpr Void tilordning (InputIterator First, InputIterator sist)

Det tar et område som argumenter, først og sist for samme sett iterator. I denne situasjonen må den tomme vektoren konstrueres først. Etter det vil tilordningsmetoden legge til alle elementene i settet til vektoren. Det innholdet innholdet forblir uendret, men fortsatt sortert. Følgende program illustrerer bruken av tilordningsmedlemfunksjonen:

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

sett st = 'j', 'i', 'h', 'g', 'f';
sett:: Iterator ITB = ST.begynne(); sett:: iterator ite = st.slutt();
vektor VTR;
VTR.tilordne (itb, ite);
for (sett:: iterator it = itb; den != it; det ++) cout << *it << ", "; cout << endl;
for (int i = 0; iretur 0;

Utgangen er:

F, g, h, i, j,
F, g, h, i, j,

Den første for-loopen er å vise innholdet som er uendret. Det andre er å vise vektoren hvis innhold i begynnelsen er det av det sorterte settet.

Dette har vært den andre metoden for å konvertere eller endre et sett til en vektor. Forklaringen på den tredje metoden for denne artikkelen følger:

En kopi () -funksjon i algoritmens bibliotek

Syntaksen til en av kopifunksjonene i algoritmebiblioteket, er:

mal
ConstExpr OutputIterator Copy (InputIterator First, InputIterator Last, OutputIterator Resultat)

Når det. Hvis P er en input iterator, ville *P returnere verdien som P POMPE POMPET. Hvis P er en output iterator, kan *P motta en verdi for minnestedet som pekes på av P.

De første og andre argumentene her, er de samme som for den forrige funksjonen. Argumentresultatet er en outputIterator som peker på det første elementet i vektoren.

Returutgangeren her, peker rett etter det siste elementet i vektoren. Dette betyr at vektoren må opprettes med en størrelse som er minst lik størrelsen på settet.

Med denne kopien () -funksjonen må algoritmebiblioteket inkluderes i programmet fordi funksjonen er i algoritmiblioteket. Følgende kode i C ++ Main () -funksjonen, viser hvordan du bruker kopieringsfunksjonen:

sett st = 'j', 'i', 'h', 'g', 'f';
sett:: Iterator ITB = ST.begynne(); Sett :: Iterator ite = ST.slutt();
vektor VTR (10);
vektor:: Iterator Outit = Kopi (ITB, ITE, VTR.begynne());
VTR.Endre størrelse (Outit - VTR.begynne());
for (sett:: iterator it = itb; den != it; det ++) cout << *it << ", "; cout << endl;
for (int i = 0; iretur 0;

Utgangen er:

F, g, h, i, j,
F, g, h, i, j,

Utgangsatoren som returneres er av vektoren. Vektoren måtte endres til antall elementer som er i settet. Innholdet i settet endret ikke.

Konklusjon

Et sett kan endres til en vektor ved hjelp av rekkevektvektorkonstruktøren eller vektortildelingen () medlemsfunksjonen eller algoritmebibliotekets kopi () -funksjonen. Det er andre mindre enkle kodemetoder - se senere.