STL - Container

Dal terzo capitolo di Designing Components with the C++ STL, di Ulrich Breymann, dedicato ai container.

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&);
Per un container reversibile sono disponibili anche interatori inversi e i metodi rbegin() e rend().

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());
Nella STL ci sono tre tipi di container sequenziali: vector, list e deque.

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