Costruzione di Interfacce Lezione 12 C++STL

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Funzioni In C++ le funzioni sono caratterizzate da un nome, dal tipo della variabile ritornata e da una lista di parametri (opzionali) La lista dei parametri.
Argomenti della lezione
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Procedure e funzioni In linguaggio C.
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
Generazione di numeri casuali in Dev C++
Programmazione object oriented in C++
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Semantica Operazionale di un frammento di Java: lo stato.
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
Introduzione al linguaggio C
Le funzioni.
Fondamenti di Informatica
Algoritmi in C++ (1) da completare
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Funzioni definite dall’utente
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Calcolatori Elettronici III
Costruzione di Interfacce Lezione 11 Dal Java al C++ parte 2
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 22 Estensioni Opengl, Multitexturing,
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 26 XML read e write / Gl Selection e picking
Costruzione di Interfacce Lezione 19 Qt Tutorial Designer
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Costruzione di Interfacce Lezione 20 Qt + Opengl
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 25 Xml for dummies Parte 2
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 30 MMeditor e collision detection
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 21 Trackball
2 Dicembre 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 23 Scene Graphs, Object Loading
Costruzione di Interfacce Lezione 8 Rasterizzazione
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Approfondimento delle classi
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Le funzioni.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Namespaces 1. Utilizzati per contenere tipi (classi, strutture, interfacce … ) ed altri namespaces La Class Library è organizzata gerarchicamente mediante.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
void binario(int n); …………………
Creazione progetto in C++/DEV
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Lo sviluppo top down Le funzioni
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
CORSO DI PROGRAMMAZIONE II Lezione 22
Programmazione ad oggetti
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Alberi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Scrivere e compilare programmi
Esercitazione sull’ ordinamento 20 maggio 2003
Copyright © Istituto Italiano Edizioni Atlas
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
Operatori – numeri pseudocasuali - costanti
Transcript della presentazione:

Costruzione di Interfacce Lezione 12 C++STL

26 oct 2003Costruzione di Interfacce - Paolo Cignoni2 Template I Template sono un meccanismo che permette di definire funzioni e classi basate su argomenti e oggetti dal tipo non specificato template class swap(T &a, T &b); template class class List {...}; Queste funzioni e oggetti generici diventano codice completo una volta che le loro definizioni sono usate con oggetti reali

26 oct 2003Costruzione di Interfacce - Paolo Cignoni3 Esempio di template di funzione Scambio tra due oggetti generici: template void swap(T &a, T &b){ T tmp = a; a = b; b = tmp; } int main(){ int a = 3, b = 16; double d = 3.14, e = 2.17; swap(a, b); swap(d, e); // swap (d, a); errore in compilazione! return (0); }

26 oct 2003Costruzione di Interfacce - Paolo Cignoni4 Esempio di template di classe Punto 3D generico: template class Point3 { public: T v[3]; Point3 operator + ( Point3 const & p) const { return Point3(v[0]+p.v[0],v[1]+p.v[1],v[2]+p.v[2] ); } Point3 & operator =( Point3 const & p ){ v[0]= p.v[0]; v[1]= p.v[1]; v[2]= p.v[2]; return *this; } }; int main(){ Point3 a1(0,0,0),a2(1,2,3); Point3 b(1,1,1); a1=a1+a2; //ok a1=b+a2; /// error!! return (0); }

26 oct 2003Costruzione di Interfacce - Paolo Cignoni5 Template Osservazioni Notare che la definizione di una funzione template è simile ad una macro, nel senso che la funzione template non è ancora codice, ma lo diventerà una volta che essa viene usata Il fatto che il compilatore generi codice concreto solo una volta che una funzione è usata ha come conseguenza che una template function non può essere mai raccolta in una libreria a run time Un template dovrebbe essere considerato come una sorta di dichiarazione e fornito in un file da includere. Quando da un template si genera codice per un certo specifico tipo si dice che si è istanziato quel template per quel tipo

26 oct 2003Costruzione di Interfacce - Paolo Cignoni6 Namespace Lo spazio dei nomi delle classi e delle funzioni globali è unico. Per questo motivo i venditori di librerie e di classi di solito danno nomi lunghi e con vari prefissi che li rendano non ambigui (e.g. SQL_Acc_Start(…)) In c++ lo spazio globale dei nomi è scomponibile in blocchi usando i namespace

26 oct 2003Costruzione di Interfacce - Paolo Cignoni7 Namespace namespace MyLib { class myClass {…}; } int main() { myLib::myClass p; } Nota Namespace possono apparire solo nello scope globale (non dentro una classe o una funz), possono essere nested Un namespace puo continuare in file diversi (non è quindi una ridefinizione). Non ci vuole il ; in fondo

26 oct 2003Costruzione di Interfacce - Paolo Cignoni8 Namespace use Per accedere ai nomi definiti in un namespace Direttiva using Using namespace myLib; myClass p Risolutore di Scope :: myLib::myClass p

26 oct 2003Costruzione di Interfacce - Paolo Cignoni9 STL: Standard Template Library Libreria di classi container, algoritmi, iteratori che mette a disposizone in forma astratta e generica (basata su template) la maggior parte degli algoritmi e strutture dati classici Liste, insiemi ordinati, vettori, hash, code di priorità, stack ecc. Sort, permutazioni, ricerche binarie, ecc Tutte le entità della STL sono definite nel namespace std

26 oct 2003Costruzione di Interfacce - Paolo Cignoni10 STL Container I container sono tipi di dato astratti in cui è possibile meomorizzare e ritrovare informazione. Templated sul tipo delloggetto da memorizzare Possono essere sequenziali, ad accesso casuale, associativi, ordinati ecc…

26 oct 2003Costruzione di Interfacce - Paolo Cignoni11 STL Containers Tutti i container supportano: overloaded assignment operator Tests uguaglianza: == and != Ordering operators: and >=. L operatore < ritorna true se ogni elemento del primo e minore del corrispndente elemento del secondo container. Per poter istanziare un contenitore su di un certo tipo esso deve avere: A default-value (e.g., a default constructor) The equality operator ( == ) The less-than operator ( < )

26 oct 2003Costruzione di Interfacce - Paolo Cignoni12 pair Usato per memorizzare una coppia di elementi senza aver bisogno di fare una classe apposita. #include using namespace std; pair piper("PA28", "PH-ANI"), cessna("C172", "PH-ANG"); cout << piper.first << endl << // shows 'PA28' cessna.second << endl; // shows 'PH-ANG'

26 oct 2003Costruzione di Interfacce - Paolo Cignoni13 Vector Implementa un array resizable Costruttori tipici e init #include vector A; A.resize(10); vector B(4); vector C(10,0.1f);

26 oct 2003Costruzione di Interfacce - Paolo Cignoni14 vector Accesso Operator[] A[3]=5; // Nota: è responsabilità // dellutente non uscire dal vettore; A.back() è un riferimento allultimo elemento A.begin() iteratore al primo A.end() iteratore al primo dopo lultimo

26 oct 2003Costruzione di Interfacce - Paolo Cignoni15 iteratori Astrazione del concetto di puntatore. Sempre riferiti ad un istanza di un certo container: vector ::iterator it; list :iterator li; Dato un iteratore iter *iter rappresenta loggetto a cui literatore punta ++iter fa avanzare literatore nel contenitore in maniera ragionevole Se il contenitore è di tipo con accesso casuale vale anche laritmetica dei puntatori (iter+10 avanza di 10 posizioni) Usati di solito per indicare range in un container in maniera inclusiva a sx [first,last) indica un range di elementi in un container da first (incluso) a last (escluso);

26 oct 2003Costruzione di Interfacce - Paolo Cignoni16 Tipico uso iteratori Scansione di un container con iteratori vector V; … vector ::iterator vi; for(vi=V.begin();vi!=V.end();++vi) doSomething(*ii); list L; … list ::iterator li; for(li=L.begin();li!=L.end();++li) doSomething(*li); Sempre nello stesso modo per tutti i container!

26 oct 2003Costruzione di Interfacce - Paolo Cignoni17 Tipico uso iteratori Definizione di un range con iteratori vector V; sort(V.begin(), V.end()); reverse(V.begin(), V.end()); Nota [first,last) indica un range di elementi in un container da first (incluso) a last (escluso); end() è il primo oltre la fine del container e quindi è sempre non accedibile!!!

26 oct 2003Costruzione di Interfacce - Paolo Cignoni18 vector Aggiunta di elementi nel vettore Vector V; myObj obj; V.push_back(obj); Nota: Costo: ammortizzato costante; Lallocazione di memoria è gestita in maniera trasparente (fa il resize quando serve raddoppiando la size). Il vettore contiene gli oggetti, quindi si memorizza in V una copia di obj

26 oct 2003Costruzione di Interfacce - Paolo Cignoni19 vector Elementi possono essere aggiunti anche in altre posizioni ma con costo lineare nella grandezza del vettore; Operatori utili resize(int) (nota che non disalloca…) reserve(int) capacity()

26 oct 2003Costruzione di Interfacce - Paolo Cignoni20 list Il container list implementa una generica double linked list Operazioni di inserzione, cancellazione in posizione qualsiasi in tempo costante Persistenza degli oggetti nel container in memoria Iteratori agli elementi della lista restano validi a lungo…

26 oct 2003Costruzione di Interfacce - Paolo Cignoni21 map Implementa un array associativo ordinato map object; Permette di accedere ad un insieme di oggetti per contenuto. operator[] ridefinito per accedere per key map si; si[pippo]=42;

26 oct 2003Costruzione di Interfacce - Paolo Cignoni22 Altri container utili queue set stack hash e hashmap

26 oct 2003Costruzione di Interfacce - Paolo Cignoni23 Esempio di classe template Classe per la rappresentazione generica di un punto in uno spazio 3D, templatato sul tipo usato per tenere I valori delle coordinate. Point3 Overload di tutti gli operatori sensati.

26 oct 2003Costruzione di Interfacce - Paolo Cignoni24 STL algorithms Sui container visti finora nelle stl sono definiti un lunga serie di algoritmi generici che permettono di fare azioni comuni piuo meno semplici.

26 oct 2003Costruzione di Interfacce - Paolo Cignoni25 STL algorithms: Non mutating 1.for_eachfor_each 2.findfind 3.find_iffind_if 4.adjacent_findadjacent_find 5.find_first_offind_first_of 6.countcount 7.count_ifcount_if 8.mismatchmismatch 9.equalequal 10.searchsearch 11.search_nsearch_n 12.find_endfind_end

26 oct 2003Costruzione di Interfacce - Paolo Cignoni26 STL algorithms: Mutating 1.copycopy 2.copy_ncopy_n 3.Swap 1.swapswap 2.iter_swapiter_swap 3.swap_rangesswap_ranges 4.transformtransform 4.Replace 1.replacereplace 2.replace_ifreplace_if 3.replace_copyreplace_copy 4.replace_copy_ifreplace_copy_if 5.fillfill 6.fill_nfill_n 7.generategenerate 8.generate_ngenerate_n 1.Remove 1.removeremove 2.remove_ifremove_if 3.remove_copyremove_copy 4.remove_copy_ifremove_copy_if 2.uniqueunique 3.unique_copyunique_copy 4.reversereverse 5.reverse_copyreverse_copy 6.rotaterotate 7.rotate_copyrotate_copy 8.random_shufflerandom_shuffle 9.random_samplerandom_sample 10.random_sample_nrandom_sample_n 11.partitionpartition 12.stable_partitionstable_partition

26 oct 2003Costruzione di Interfacce - Paolo Cignoni27 STL algorithms: Sorting 1.Sort 1.sortsort 2.stable_sortstable_sort 3.partial_sortpartial_sort 4.partial_sort_copypartial_sort_copy 5.is_sortedis_sorted 2.nth_elementnth_element 3.Binary search 1.lower_boundlower_bound 2.upper_boundupper_bound 3.equal_rangeequal_range 4.binary_searchbinary_search 4.mergemerge 5.inplace_mergeinplace_merge 1.Set operations on sorted ranges 1.includesincludes 2.set_unionset_union 3.set_intersectionset_intersection 4.set_differenceset_difference 5.set_symmetric_differenceset_symmetric_difference 2.Heap operations 1.push_heappush_heap 2.pop_heappop_heap 3.make_heapmake_heap 4.sort_heapsort_heap 5.is_heapis_heap 3.Minimum and maximum 1.minmin 2.maxmax 3.min_elementmin_element 4.max_elementmax_element