Come imparare contenitori STL

November 6

Le classi container STL di rendere la programmazione produttiva, sicura e robusta. Sono array intelligenti che eseguono automaticamente l'allocazione della memoria, in grado di ridimensionare, lasceranno passare variabili per riferimento, inserire gli elementi in qualsiasi momento, tutte con ardente efficienza. Essi forniscono un buon motivo per passare da C con i suoi array muti in C ++. STL offre due tipi di classi contenitore: semplice e associativo, in cui un tasto viene associato ad ogni oggetto memorizzato.

istruzione

1 Leggere ed eventualmente memorizzare le due categorie di classi contenitore. Memorizzazione loro mai del male a nessuno e sarà di beneficio per voi nel lungo periodo.

Contenitori semplici: vector <>, <>, liste pila <>, coda di <>, <> deque

Associativa Container: mappa <>, impostare <>, multimappa <>, multinsieme <>

2 Ulteriori informazioni su tutte le classi contenitore per essere mostrato come un semplice contenitore può essere utilizzato. Questo tutorial illustrerà le modalità di vector <>.

3 Assegnare una dimensione al vettore. È possibile assegnare dimensioni vettore utilizzando uno dei costruttori di overload. Inoltre, è possibile utilizzare la riserva () o assegnare () metodo dopo aver dichiarato un vettore. Tutti i metodi sono i seguenti:

vector <int> arr (50); // Specificare la capacità di

vector <int> arr (50, 17); // Specificare la capacità e dare tutti gli elementi di un valore di default (17)

vector <int> arr2 (arr); // Inizializzare un vettore di un altro vettore

vector <int> vec;

vec.reserve (100); // O di riserva l'uso () per allocare la memoria

4 Iterare attraverso un vettore. È possibile farlo utilizzando i [] operatore o attraverso iteratori indice standard, che sono una caratteristica speciale STL. Le loro capacità sono oltre lo scopo di questo tutorial. I seguenti frammenti di codice mostrano la dimensione (), begin () ed i membri end ():

// Utilizzando l'indicizzazione di serie

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

cout <
}

// Utilizzando iteratori

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

cout << * iter <
}

5 Aggiungere un elemento alla fine, rimuovere tale elemento, inserire un elemento nel mezzo e restituire la dimensione del contenitore. È possibile eseguire tutte queste funzioni utilizzando il push_back (), pop_back (), inserire () e le dimensioni () metodi, rispettivamente, come illustrato di seguito:

vec.push_back (35);

vec.pop_back ();

vec.insert (pos, 19); // Pos è la posizione

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

6 Cancellare gli elementi all'interno di un intervallo, cancellare il resto degli elementi e assicurarsi che il vettore è vuoto. Per questi, si utilizza la cancellazione funzioni membro (), trasparente () e vuoto ().

vec.erase (vec.begin () + 5, vec.end () - 5); // Cancellare tutti gli elementi tranne il primo e l'ultimo 5

vec.clear (); // Cancellare tutti gli elementi

se (vero vec.empty == ()) {...} // controllare se vettore è vuoto

7 Scopri tutte le funzioni membro offerti nel vettore <>. Molti sono comuni in tutto il resto delle classi contenitore:

_Destroy (), _Eq (), _it (), _Ucopy (), _Ufill (), Assegnare (), a (), begin (), indietro (), capacità (), trasparente (), vuoto (), fine ( ), cancellare (), anteriore (), get_allocator (), max_size (), inserire (), l'operatore =, operatore [], pop_back (), push_back (), rbegin (), rend (), riserva (), ridimensionare (), le dimensioni (), swap (), ~ vettore ().

8 Assicurati di includere il file di intestazione vector.h nella parte superiore del file di origine prima di testare il codice per voi stessi. Ogni classe contenitore ha un proprio file di intestazione. Un elenco <> richiederà list.h, una coda <> richiederà queue.h, e così via.

Consigli e avvertenze

  • Le classi container vanno di pari passo con le funzioni algoritmo, un'altra caratteristica potente della Standard Template Library.