Un container é un oggetto che é usato per gestire altri oggetti che in questo contesto sono detti elementi del container. Si occupa di allocare e deallocare memoria e di controllare l'inserimento e la rimozione degli elementi.
In questo capitolo sono descritti tre container: vector, list e deque.
Metodi di un container
Ogni container mette a disposizione un insieme di metodi. Eccone un elenco, dove X é il nome del tipo del container:
- X(): default ctor; crea un container vuoto;
- X(const X&): copy ctor;
- ~X(): dtor; chiama il dtor di tutti gli elementi del container;
- iterator begin(), const_iterator begin(): inizio del container;
- iterator end(), const_iterator end(): posizione dopo l'ultimo elemento;
- size_type max_size(): massima dimensione del container;
- size_type size(): dimensione corrente del container, calcolata come la distanza tra begin() e end();
- bool empty(): equivalente a size() == 0 o begin() == end();
- void swap(X&): scambio con il container passato;
- X& operator=(const X&): operatore di assegnamento;
- bool operator==(const X&);
- bool operator!=(const X&);
- bool operator<(const X&);
- bool operator>(const X&);
- bool operator<=(const X&);
- bool operator>=(const X&);
Sequenze
Una sequenza é un container i cui elementi sono posizionati in modo strettamente lineare.
Questi sono i metodi aggiuntivi per una sequenza:
- X(n, t): crea una sequenza con n copie di t;
- X(i, j): crea una sequenza con gli elementi nell'intervallo [i, j) copiati nella nuova sequenza;
- iterator insert(p, t): inserisce una copia di t prima della locazione p, ritorna il puntatore al nuovo elemento;
- void insert(p, n, t): inserisce n copie di t prima di p;
- void insert(p, i, j): inserisce le copie degli elementi nell'intervallo [i, j) prima di p;
- iterator erase(q): elimina l'elemento puntato da q, ritorna il puntatore alla posizione seguente a q, o end();
- iterator erase(q1, q2): elimina gli elementi nell'intervallo [q1, q2), ritorna il puntatore a q2, che può essere anche end();
- void clear(): elimina tutti gli elementi, equivale a erase(begin(), end());
La lista permette di gestire efficientemente le inserzioni e eliminazioni nel mezzo del container, la doppia coda (deque = double ended queue) é utile nel caso si operi prevalentemente sugli estremi, vector corrisponde all'array. L'accesso casuale é supportato da array e deque.
Altri metodi disponibili:
- void assign(n, t = T()): rimuove gli elementi del container e poi inserisce n elementi t;
- void assign(i, j): rimuove gli elementi del container e poi inserisce gli elementi nell'intervallo [i, j).
- reference front(), const_reference front(): fornisce una reference al primo elemento del container;
- reference back(), const_reference back(): fornisce una reference all'ultimo elemento del container;
- void push_back(t): inserisce t alla fine;
- void pop_back(): elimina l'ultimo elemento;
- void resize(n, t = T()): cambia la dimensione del container, elementi vengono aggiunti o eliminati alla fine del container;
- reverse_iterator rbegin(), const_reverse_iterator rbegin(): iteratore iniziale per la scansione al contrario;
- reverse_iterator rend(), const_reverse_iterator rend(): iteratore finale per la scansione del container al contrario;
Nessun commento:
Posta un commento