Hvordan lære STL Containere

Container klasser av STL gjøre programmer produktiv, sikker og robust. De er smarte arrays som utfører minnetildeling automatisk kan endre størrelse, la deg passere variabler som referanse, sette inn elementer på noe punkt, alle med flammende effektivitet. De gir en god grunn til å bytte fra C med sine dumme matriser til C ++. STL tilbyr to typer container klasser: enkel og assosiativ, hvor en tast er knyttet til hver lagret objekt.

Bruksanvisning

1 Les og eventuelt huske de to kategoriene av container klasser. Memorere dem har aldri skadet noen, og vil være til nytte for deg i det lange løp.

Enkle Containere: vektor <>, lister <>, stabel <>, kø <>, deque <>

Assosiativ Containere: kart <>, sett <>, multimap <>, multiset <>

2 Lær om alle container klasser ved å bli vist hvordan en enkel beholder kan brukes. Denne opplæringen vil illustrere metodene for vektor <>.

3 Tildele en størrelse til vektoren. Du kan tildele vektorstørrelsen du bruker noen av de overbelastet konstruktører. I tillegg kan du bruke reserve () eller tildele () metoden etter at du har erklært en vektor. Alle fremgangsmåter er vist nedenfor:

vector <int> arr (50); // Angi kapasitet

Vektoren <int> arr (50, 17); // Angir kapasitet og gi alle elementer en standardverdi (17)

vector <int> arr2 (arr); // Initial en vektor fra en annen vektor

vector <int> vec;

vec.reserve (100); // Eller bruk reserve () for å tildele minne

4 Iterere over en vektor. Du kan gjøre dette ved hjelp av standard indeks [] operatør eller gjennom iteratorer, som er en spesiell STL funksjonen. Deres evner er utenfor omfanget av denne opplæringen. Følgende kodebiter demonstrere størrelsen (), begynner () og slutten () medlemmer:

// Bruker standard indeksering

for (int i = 0; i <= vec.size (); i ++) {

domstol <
}

// Bruker iteratorer

for (vector <> :: iterator ITER = vec.begin (!); ITER = vec.end (); ITER ++) {

cout << * ITER <
}

5 Legg et element på slutten, fjerne dette elementet, sette inn et element i midten og returnere container størrelse. Kan utføre alle disse funksjoner ved hjelp av push_back (), pop_back (), sett () og størrelse () metoder, henholdsvis, som vist nedenfor:

vec.push_back (35);

vec.pop_back ();

vec.insert (pos, 19); // Pos er plasseringen

cout << vec.size () << endl;

6 Slette elementer innenfor et område, slette resten av elementene og sørge for at vektoren er tom. For disse, bruker du medlemsfunksjoner sletting (), klar () og tom ().

vec.erase (vec.begin () + 5, vec.end () - 5); // Slette alle elementer unntatt den første og siste fem

vec.clear (); // Slette alle elementer

if (sann == vec.empty ()) {...} // sjekke om vektor er tom

7 Sjekk ut alle medlems funksjonene som tilbys i vektoren <>. Mange er vanlig i resten av container klasser:

_Destroy (), _Eq (), _Lt (), _Ucopy (), _Ufill (), Tildele (), ved (), begynner (), tilbake (), kapasitet (), klar (), tom (), slutten ( ), slette (), foran (), get_allocator (), MAX_SIZE (), sett inn (), operatør =, operatør [], pop_back (), push_back (), rbegin (), rive (), reserve (), endre størrelse (), størrelse (), swap (), ~ vektor ().

8 Pass på at du inkluderer vector.h header filen øverst i kildefilen før du tester denne koden for deg selv. Hver container klasse har sin egen header fil. En liste <> vil kreve list.h, en kø <> vil kreve queue.h, og så videre.

Hint

  • Container klassene går hånd i hånd med algoritmen funksjoner, en annen kraftig funksjon i Standard Template Library.