Categorie
Winzipedia Uso dell'wiki |
STLInformatica3.STL VersioniNascondi le modifiche minori - Mostra le modifiche Modificate le linee 2-3: da:
'''Autore:''' [[Profiles.Tommaso | Tommaso Bonetti]] a:
'''Autore:''' [[Profiles.Tommaso | Tommaso Bonetti]] Modificate le linee 2-4: da:
''' a:
'''Autore:''' [[Profiles.Tommaso | Tommaso Bonetti]]\\ Modificate le linee 2-4: da:
'''Autori: a:
'''Autori: Tommaso Bonetti'''\\ Modificata la linea 148: da:
#capire come mai il mio scritto diventato lunghissimo... almeno io lo vedo di una rarghezza incredibile, le righe vanno a capo solo quando finiscono... a:
#capire come mai il mio scritto diventato lunghissimo... almeno io lo vedo di una rarghezza incredibile, le righe vanno a capo solo quando finiscono... ( risolto, son troppo figo) Modificate le linee 6-17: da:
a:
*Introduzione *Descrizione *Un passo indietro: cosa si intende per template * programmare con le STL *Iteratori *Contenitori *Vector *List *Contenitori associativi: map<K, T, Compare> *Stringhe *da fare Modificate le linee 39-41: da:
a:
# quando si vuole implementare la parte invariante di un algoritmo una volta sola e lasciare che le sottoclassi implementino il comportamento che variare # per avere modo di controllare come le sottoclassi ereditano dalla superclasse, facendo in modo che i metodi template chiamino dei metodi "gancio" (hook) e impostarli come unici metodi sovrascrivibili. Modificate le linee 134-138: da:
*substr() = " Ritorna una certa sottostringa" a:
*substr() = " Ritorna una certa sottostringa" !!da fare #capire come mai il mio scritto diventato lunghissimo... almeno io lo vedo di una rarghezza incredibile, le righe vanno a capo solo quando finiscono... # fare la parte sugli algoritmi di cui non ci ho capito molto Aggiunte le linee 1-134:
!Standard Template Library '''Autori: Tomamso Bonetti'''\\ ->'''Sommario''' !!Introduzione !!Descrizione La STL costituisce uno strato software ormai divenuto fondamentale per i programmatori C++, cui fornisce un set precostituito di classi comuni, come container e array associativi, che hanno la caratteristica di poter operare con qualsiasi tipo di dato, sia primitivo che definito dall'utente, richiedendo allo sviluppatore nel contratto il rispetto di pochi vincoli (ad esempio, l'implementazione di operatori o funzioni di assegnamento o confronto) offrendogli in cambio classi complete di tutte le funzioni e operazioni elementari (ad es. in un container, copia, assegnamento, inserimento/rimozione, iterazione tra gli elementi) e pronte all'uso. "(grazie Wikipedia)" !!Un passo indietro: cosa si intende per template !!! Un metodo Template !!!Quando si usa # per avere modo di controllare come le sottoclassi ereditano dalla superclasse, facendo in modo che i metodi template chiamino dei metodi "gancio" (hook) e impostarli come unici metodi sovrascrivibili. !!!un esempio rapido # per gli int: void swap(int& x, int& y){int tmp=x; x=y; y=tmp; } # per gli double: void swap(double& x, double& y){double tmp=x; x=y; y=tmp; } # per i float: void swap(float& x, float& y){floattmp=x; x=y; y=tmp; } #ecc... # per tutti i tipi: template<class T> void swap(T& x, T& y){ T tmp=x;x=y;y= tmp; } Programmare sapendo usare la STL fa risparmiare un sacco di tempo, di codice, e di errori. Si evita infatti tutte le volte di reinventare la ruota. !! Iteratori Gli iteratori astraggono il concetto di puntatori. In particolare vengono usati per puntare ad un elemento di una sequenza. Su un iteratore i sono sempre definite almeno queste tre operazioni: # Dereferenziazione: *i # Test di (dis)uguaglianza: i==j, i!=j Vari tipi di iteratori: # Forward: Permettono di avanzare in una sequenza # Bidirectional Possono scorrere in entrambi i sensi di una sequenza !!Contenitori Ogni contenitore esporta degli iteratori che permettono di accedere e puntare agli elementi: (es. vector<int> v ) # v.begin() restituisce un iteratore al primo elemento di v !!!Vector Alcuni metodi importanti: *size_type vector::size() const "lunghezza del vector" *bool vector::empty() const "controlla che il vector contenga almeno un elemento" *size_type vector::capacity() const "credo che controlli quanti elementi possono essere inseriti al massimo" *reference vector::operator[](size_type) const *reference vector::front() "ritona il primo elemento" *reference vector::back() "ritorna l'ultimo elemento" *void vector::pop_back() ) "Cancella l'ultimo elemento" *iterator vector::insert(iterator, const T&) ) "inserisce un nuovo elemento" *iterator vector::erase(iterator) ) "cancella un elemento dal vettore" !!!List Alcuni metodi importanti: * size_type list::size() const ) * bool list::empty() const * iterator list::push_back(const T&) ) * iterator list::push_front(const T&) ) * void list::pop_back() ) * void list::pop_front() ) * iterator list::insert(iterator, const T&) ) * iterator list::erase(iterator) ) * void list::remove(const T& val) ) * void list::reverse() ) !!!Contenitori associativi: map<K, T, Compare> * map::key_type * map::mapped_type * map::value_type --> pair<key_type,mapped_type> * pair<iterator,bool> map::insert(const value_type&) * iterator map::find(const key_type&) * mapped_type map::operator[](const key_type&) !!!Stringhe Le stringhe della libreria standard diverse dalle stringhe di C, usate come container. Sono oggetti della classe string del C++ ma sono simili ai vettori solo che gli elementi sono solo di tipo character. # Operazioni su stringhe # Size e capacity # Accesso agli elementi di una stringa I principali metodi delle stringhe sono: *=,assign = "Assegna un nuovo valore" *swap = " Swap dei valori tra due stringhe" *+=, append(),push_back() = " Appende caratteri" *insert() = " Inserisce caratteri" *erase() = " Cancella caratteri" *clear() = " Rimuove I caratteri (la svuota)" *resize() = " Cambia il # di caratteri (cancella o appende)" *replace() = " Sostituisce caratteri" *+ = " Concatena stringhe" *==,!=,<,<=,>,>=,compare() = " Paragona stringhe" *size(), length() = " Ritorna il numero dei caratteri" *max_size() = " Ritorna il massimo num di caratteri" *capacity() = " Ritorna il numero di caratteri possibili da all.ocare" *reserve() = " Riserva memoria per un certo num. di caratteri." *[],at() = " Accede ad un carattere" *>>,getline() = " Legge il valore da uno strema" *<< = " Scrive il valore su uno strema" *copy() = " Copia o scrive i valori in una c_string" *c_str() = " Ritorna il valore come c_string" *data() = " Ritorna il valore come array di caratteri" *substr() = " Ritorna una certa sottostringa" |