Slette medlemsfunksjonen i C ++ STD -sett

Slette medlemsfunksjonen i C ++ STD -sett
Etter at verdiene er satt inn i et sett i C ++, blir verdiene sortert internt i stigende rekkefølge når innstillingene er standard. Set -klassen i C ++ har slett () medlemsfunksjon. Den har fire overbelastede varianter som blir utforsket i denne artikkelen. Funksjonen sletter ett eller flere elementer i det angitte objektet.

Et eksempel på et sett er:

"Plum", "Blackberry", "Apricot", "Strawberry", "Peach", "Papaya", "Guava"

Det er et sett med navn på frukt. Hver verdi her kalles en nøkkel. Dette er også settet bokstavelig i C++. Det er også bokstavelig bokstavelig. Og det er også initializer_list.

Et C ++ -program som lager sett og strenger bør starte som følger:

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

Inkluderingen av iostream -biblioteket er for output (og input) til terminalen (konsoll). Inkluderingen av settbiblioteket er for sett. Inkluderingen av strengbiblioteket er for strenger. Hvis pekere til char* brukes i stedet for strengklassen, er det pekerne til Char Literals 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 som ender i en semikolon. Dette insisterer på at ethvert navn som ikke er gitt av standardnavnets navn, er fra standard navneområdet.

Merk: Når verdier er satt inn i det angitte objektet, er de sortert stigende, internt, for standardinnstillingene.

størrelse_type erase (const key_type & x)

Dette sletter nøkkelen, hvis navn er argumentet for slettingens () medlemsfunksjon til settet. Programmereren må på forhånd vite at denne nøkkelen eksisterer i settet. Funksjonen returnerer antall elementer som er slettet fra settet. Følgende program viser hvordan du bruker denne medlemsfunksjonen:

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

setst ("plomme", "bjørnebær", "aprikos", "jordbær", "fersken", "papaya", "guava");
int sz = st.slette ("papaya");
cout<for (sett :: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
cout<retur 0;

Utgangen er:

1
aprikos, bjørnebær, guava, fersken, plomme, jordbær,

Iterator Erase (iteratorposisjon)

Denne medlemsfunksjonen sletter nøkkelen iteratoren peker på. Følgende kode illustrerer dette:

setst ("plomme", "bjørnebær", "aprikos", "jordbær", "fersken", "papaya", "guava");
for (sett :: iterator iter = st.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
if ("papaya" == *iter)
st.slette (iter);

cout<for (sett :: iterator ite = st.begynne(); ite != ST.slutt(); ite ++)
cout<< *ite<< ", ";

cout<Utgangen er:

aprikos, bjørnebær, guava, papaya, guava, fersken, plomme, jordbær,
aprikos, bjørnebær, guava, fersken, plomme, jordbær,

"Papaya" ble slettet. Da det ble slettet, tok Guava sin plass ved den interne sortering. Det er grunnen til at Guava har dukket opp to ganger i den første utgangslinjen.

iterator erase (const_iterator posisjon)

Denne overbelastede medlemsfunksjonen er den samme som den ovenfor, bortsett fra at argumentet er en konstant iterator. Det returnerer fortsatt den normale iteratoren. Den returnerte iteratoren peker på neste element etter at den slettet ut basert på den interne sortering. Følgende program illustrerer alt det:

setst ("plomme", "bjørnebær", "aprikos", "jordbær", "fersken", "papaya", "guava");
sett :: iterator ite;
for (sett :: const_iteratoriter = ST.begynne(); iter != ST.slutt(); iter ++)
cout<< *iter<< ", ";
if ("papaya" == *iter)
ite = st.slette (iter);

cout<for (sett :: iterator it = st.begynne(); den != ST.slutt(); det ++)
cout<< *it << ", ";

cout<Utgangen er:

aprikos, bjørnebær, guava, papaya, guava, fersken, plomme, jordbær,
fersken
aprikos, bjørnebær, guava, fersken, plomme, jordbær,

iterator erase (const_iterator først, const_iterator sist)

“First” er en iterator som peker på et element i det sorterte settet. “Last” er en iterator som peker på et element i det sorterte settet etter først. Argumentasjonen er konstante iteratorer. Denne medlemsfunksjonen sletter et område som inkluderer elementet for "først", og som utelukker elementet til sist. Følgende kode illustrerer dette:

setst ("plomme", "bjørnebær", "aprikos", "jordbær", "fersken", "papaya", "guava");
for (sett :: iterator it = st.begynne(); den != ST.slutt(); det ++)
cout<< *it << ", ";
cout<Sett :: const_iteratoritb = ST.begynne(); Sett :: const_iteratorite = ST.slutt();
itb ++; itb ++; ite--; ite--; ite--;
Sett :: Iterator ite = ST.slette (itb, ite);
for (sett :: iterator it = st.begynne(); den != ST.slutt(); det ++)
cout<< *it << ", ";

cout<Utgangen er:

aprikos, bjørnebær, guava, papaya, fersken, plomme, jordbær,
aprikos, bjørnebær, fersken, plomme, jordbær,

Utvalget av “Guava, Papaya, Peach”, unntatt “Peach”, er fjernet.

Erstatte en verdi

Settet i C ++ har ingen medlemsfunksjon for å erstatte en verdi; Og det skal ikke ha. Dette er fordi hver gang en verdi settes inn, er det fullstendig sorting av settet (listen). Så det er ikke fornuftig å erstatte en verdi hvis posisjon vil endre seg etter å ha sortet. Likevel, hvis en verdi blir slettet, kan det settes inn en ny verdi som vil gjennomgå posisjonsjustering. I det følgende programmet blir "BlackBerry" slettet, og "Watermelon" settes inn. Den totale størrelsen forblir den samme ved 7.

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

setst ("plomme", "bjørnebær", "aprikos", "jordbær", "fersken", "papaya", "guava");
st.slette ("bjørnebær"); st.Sett inn ("vannmelon");
for (sett :: iterator it = st.begynne(); den != ST.slutt(); det ++)
cout<< *it << ", ";
cout<int sz = st.størrelse();
cout<retur 0;

Utgangen er:

aprikos, guava, papaya, fersken, plomme, jordbær, vannmelon,
7

Konklusjon

I C ++ er SET -klassen i Set Library of the Main C ++ Standard Library. Set -klassen har fire overbelastede sletter () medlemsfunksjoner. Et enkelt element kan slettes. En rekke elementer unntatt det siste elementet kan også slettes. Etter hver slettingshandling blir settet sortert internt.

Settet i C ++ har ingen medlemsfunksjon for å erstatte en verdi; Og det skal ikke ha. Dette er fordi hver gang en verdi settes inn, er det fullstendig sorting av settet (listen). Så det er ikke fornuftig å erstatte en verdi hvis posisjon vil endre seg etter å ha sortet.