Iterere et STD -sett i C ++

Iterere et STD -sett i C ++
Følgende er et sett med fruktnavn: "Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape"

I C ++, et sett som skrevet som dette, er et sett bokstavelig eller en matrise bokstavelig. Det er også initializer_list. I C ++ er en iterator en klasse. Selv om det er en klasse, oppfører objektet seg som en peker. Når det økes, peker det på neste element. Når det er redusert, peker det på det forrige elementet. Akkurat som pekeren kan bli derferert av indireksjonsoperatøren, kan iteratoren også bli derferert på samme måte. Det er forskjellige typer iteratorer for settet i C++. Denne artikkelen forklarer de forskjellige iteratorene for settet og hvordan du bruker dem.

Et program for å kode ovennevnte sett, eller et hvilket som helst sett, bør begynne med følgende:

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

Den første linjen inkluderer iostream -biblioteket. Dette er nødvendig for terminalen (konsoll). Den andre linjen inkluderer Set Library. Dette er nødvendig for angitt programmering. Den tredje linjen inkluderer strengbiblioteket. For å bruke strenger må strengklassen inkluderes; Ellers er det pekerne på strengene som vil bli sortert og ikke streng alfabetiske litteraler selv. Dette er alle under-libraries fra hovedstandardbiblioteket, i C++. STD i tittelen på denne artikkelen betyr standard. Den fjerde linjen er ikke et direktiv. Det er en uttalelse. Det insisterer på at ethvert navn som brukes i programmet som ikke er gitt av brukernavnet, er fra standardnavnet.

Iteratorklassen trenger ikke å bli inkludert. Det er allerede i settklassen.

Merk: Etter at verdiene er satt inn i settet, blir de sortert internt i stigende rekkefølge med standardinnstillinger.

Iterator

Dette iteratorklasseobjektet returneres av start () eller slutt () medlemsfunksjoner i SET -klassen. Begynnende () Medlemsfunksjon returnerer en iterator som peker på det første elementet i settet. Slutt () medlemsfunksjon returnerer en iterator som peker rett etter det siste elementet i settet.

Denne iteratoren fungerer med == eller != operatør, men fungerer ikke med = operatørene. Selv om denne iteratoren ikke er offisielt konstant, kan det hende at verdien den ikke blir endret. Følgende kode viser hvordan du bruker denne iteratoren:

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

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout << *iter << ", ";
cout << endl;
retur 0;

Utgangen er:

Banan, bjørnebær, drue, pasjonsfrukt, vannmelon,

For å endre (endre) verdien av et sett, må settets slettefunksjon brukes til å slette elementet. Etter det kan en ny verdi settes inn. Etter innsetting vil det være intern sortering, og verdien passer kanskje ikke nøyaktig der den gamle verdien var. Endre eller endre verdien (eller elementet) i et sett, er diskusjon, for en annen tid - se senere.

Reverse_Iterator

Dette er det motsatte av ovennevnte iterator. Dette Reverse_Iterator Class -objektet returneres av RBEGIN () eller REND () Medlemsfunksjonene til SET -klassen. Rbegin () medlemsfunksjonen returnerer en iterator som peker på det siste elementet i settet. Rend () medlemsfunksjonen returnerer en iterator som peker rett før det første elementet i settet.

Denne reverse_iteratoren fungerer med == eller != operatør, men fungerer ikke med = operatørene. Selv om denne iteratoren ikke er offisielt konstant, kan det hende at verdien den ikke blir endret. Følgende kode viser hvordan du bruker denne iteratoren:

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: Reverse_Iterator iter = ST.rbegin (); iter != ST.Rend (); iter ++)
cout << *iter << ", ";
cout << endl;

Utgangen er:

vannmelon, pasjonsfrukt, drue, bjørnebær, banan,
sortert i reversert orden.

const_iterator

Dette const_iterator -klassen blir returnert av cbegin () eller cend () medlemsfunksjoner i SET -klassen. RBEGIN () medlemsfunksjonen returnerer en const_iterator som peker på det første elementet i settet. Rend () medlemsfunksjonen returnerer en const_iterator som peker rett etter det siste elementet i settet.

Denne const_iteratoren fungerer med == eller != operatør, men fungerer ikke med = operatørene. Denne iteratoren er offisielt konstant, og verdien den peker på kan ikke endres. Følgende kode viser hvordan du bruker denne iteratoren:

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: const_iterator iter = st.cbegin (); iter != ST.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

Utgangen er:

Banan, bjørnebær, drue, pasjonsfrukt, vannmelon,

const_reverse_iterator

Dette er det motsatte av ovennevnte iterator. Dette objektet const_reverse_iterator blir returnert av crbegin () eller crend ​​() medlemsfunksjoner i SET -klassen. Crbegin () medlemsfunksjonen returnerer en iterator som peker på det siste elementet i settet. Crend () medlemsfunksjonen returnerer en iterator som peker rett før det første elementet i settet.

Denne const_reverse_iterator fungerer med == eller != operatør, men fungerer ikke med = operatørene. Denne iteratoren er offisielt konstant, og verdien den peker på kan ikke endres. Følgende kode viser hvordan du bruker denne iteratoren:

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: const_reverse_iterator iter = st.crbegin (); iter != ST.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

Utgangen er

vannmelon, pasjonsfrukt, drue, bjørnebær, banan,
sortert i reversert orden.

const_iterator cbegin () og cend ()

cbegin () returnerer en ubetinget konstant iterator til det første elementet i settet. Cend () returnerer en ubetinget konstant iterator som er like etter det siste elementet i settet. Følgende kode viser hvordan du bruker den:

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: const_iterator iter = st.cbegin (); iter != ST.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

Utgangen er:

Banan, bjørnebær, drue, pasjonsfrukt, vannmelon,
const_reverse_iterator crbegin () og crend ​​()

Dette er det motsatte av ovennevnte. Følgende kode viser hvordan du bruker den:

sett ST ("Passion Fruit", "Banana", "Watermelon", "BlackBerry", "Grape");
for (sett:: const_reverse_iterator iter = st.crbegin (); iter != ST.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

Utgangen er:

vannmelon, pasjonsfrukt, drue, bjørnebær, banan,

Konklusjon

Alle iteratorene som ble returnert av medlemsfunksjonene til det faste objektarbeidet med == eller != operatør, men ikke jobbe med = operatørene. Alle av dem kan økes eller dekrementeres. Alle iteratorene som er returnert av medlemsfunksjonene til settet er direkte eller indirekte konstante. Dette betyr at verdiene de peker på ikke kan endres ved hjelp av iteratoren.

For å endre (endre) verdien av et sett, må settets slettefunksjon brukes til å slette elementet. Etter det kan en ny verdi settes inn. Etter innsetting vil det være intern sortering, og verdien passer kanskje ikke nøyaktig der den gamle verdien var. Endre eller endre verdien (eller elementet) i et sett er diskusjon for en annen tid - se senere.