1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Argomenti della lezione
Stringhe di caratteri In linguaggio C.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
Generazione di numeri casuali in Dev C++
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Anno accademico Array e puntatori in C.
Hash Tables Indirizzamento diretto Tabelle Hash Risoluzioni di collisioni Indirizzamento aperto.
Strutture dati elementari
Algoritmi in C++ (1) da completare
Code con priorità Ordinamento
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Mergesort1 if (n>1) /* la collezione contiene almeno due elementi. */ {1. Dividi la collezione in due di circa la metà degli elementi. 2. chiamata ricorsiva.
Process synchronization
Costruzione di Interfacce Lezione 12 C++STL
Introduzione al linguaggio C++ 5 lezioni
Corso di Informatica (Programmazione)
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
APPUNTI SUL LINGUAGGIO C
07/04/2003Algoritmi Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure.
Algoritmi e Strutture Dati
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente)
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Struct, enum, Puntatori e Array dinamici
Esercizi C su array e matrici
Le funzioni.
Java Collections.
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.
Tavole dinamiche Spesso non si sa a priori quanta memoria serve per memorizzare dei dati in un array, in una tavola hash, in un heap, ecc. Può capitare.
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Algoritmi e strutture dati
Corso di informatica Athena – Periti Informatici
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Unità Didattica 3 Linguaggio C
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Esercizi su alberi binari di ricerca
Complessità di un algoritmo
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
A LGORITMI DI ORDINAMENTO Cinzia Reverberi. COS’È UN ALGORITMO? Un algoritmo è un insieme ben ordinato di operazioni non ambigue ed effettivamente calcolabili.
Array (ordinamento) CORDA – Informatica A. Ferrari.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Liste di Interi Esercitazione. IntList Lista di interi Problema tipico: memorizzare una sequenza di valori [6,0,9,3….9] Vediamo un tipo di dato utile.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Ordinamento dei vettori (SELECTION-SORT) Ordinamento per selezione (selection- sort) Si cerca l’elemento più piccolo e si scambia con l’elemento in posizione.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
Transcript della presentazione:

1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria di classi di contenitori, algoritmi ed iteratori. STL e una libreria generica: tutti i suoi componenti sono parametrizzati (possono essere applicati a qualsiasi tipo, anche creato dallutente)

2 Un contenitore è un oggetto capace di immagazzinare altri oggetti e che possiede metodi per accedere ai suoi elementi. –Ogni contenitore ha un iteratore associato che permette di muoversi tra gli elementi contenuti –Una sequenza è un contenitore di lunghezza variabile i cui elementi sono organizzati linearmente. E possibile aggiungere e rimuovere elementi –Un contenitore associativo è una sequenza che permette un efficiente accesso ai suoi elementi basato su una chiave. Contenitori

3 Gli iteratori sono dei puntatori agli elementi di un contenitore e ci permettono di muoverci allinterno di esso: –Iteratori monodirezionali: Permettono di accedere allelemento successivo o al precedente –Iteratori bidirezionali : Permettono di accedere sia allelemento successivo che al precedente –Iteratori ad accesso casuale : Permettono di accedere ad un qualunque elemento del contenitore Iteratori (puntatori intelligenti)

4 Sequenze Vector (#include ) –Tempo costante di inserimento e cancellazione di elementi allinizio e alla fine del vettore. –Tempo lineare con il numero di elementi per inserimento e cancellazione di elementi allinterno del vettore –Iteratore ad accesso casuale List (#include ) –Tempo costante di inserimento e cancellazione di elementi in ogni punto della lista –Iteratore bidirezionale

5 Vector begin() end() end() p pp p p 0 push_back() p ++ Le locazioni di memoria sono contigue –Accesso casuale, veloce laccesso agli elementi, lenti inserimento ed estrazione

6 Vector (dichiarazioni) Si dichiara: vector v; // dichiara un vettore vuoto di interi vector v; // vettore di razionali vector v(7); // vettore di 7 interi vector v(5,3); // vettore di 5 interi tutti uguali a 3 v.size() // dimensione del vettore // si può usare normalmente v[i] per accedere agli elementi

7 Vector (iteratori) Un iteratore è un puntatore ad un elemento del vector. Dichiarazione: vector ::iterator it; // dichiara un iteratore di un vettore di interi vector ::reverse_iterator it; // dichiara un iteratore inverso vector ::const_iterator it; // dichiara un iteratore di un vettore costante di interi it++ (avanza di un elemento o retrocede nel caso di iteratori inversi) It-- (retrocede di un elemento o avanza nel caso di iteratori inversi) v.begin() // restituisce literatore al primo elemento del vettore v.end() // restituisce lit. al successivo dellultimo del vettore *it // restituisce loggetto puntato da it it=(it.begin()+it.end())/2; restituisce lit. allelemento medio v.rbegin() v.rend() //restituiscono gli iteratori inversi allultimo e allelemento precedente il primo

8 Vector (metodi) Il vector può avere dimensione variabile. v.push_back(5); // inserisce 5 alla fine del vettore (la dimensione sarà // aumentata di uno) v.pop_back() // cancella lultimo elemento(la dimensione sarà // diminuita di uno) v.insert (it,18); // inserisce 18 nella posizione precedente alliteratore v.erase (it); // cancella lelemento nella posizione delliteratore // (literatore viene spostato allelemento successivo)

9 Algoritmi (#include ) Gli algoritmi sono delle funzioni globali capaci di agire su contenitori differenti Sono incluse operazioni di ordinamento (sort, merge, min_element, max_element...), di ricerca (find, count, equal...), di trasformazione (transform, replace, fill, rotate, shuffle...), e varie altre operazioni. find count copy max_element sort min_element

10 Algoritmi Possono essere applicati a tutti i contenitori (o quasi) sort (it1, it2); // ordina un vettore (non vale per le liste) //dalliteratore it1 alliteratore it2 reverse (it1, it2); // inverte un vettore da it1 a it2 it_trov=find (it1,it2,5) // cerca il 5 da it1 a it2. Se lo trova restituisce // literatore, altrimenti restituisce v.end() it_max=max_element (it1,it2) // restituisce literatore che punta al // massimo del vettore it_min=min_element (it1,it2) // restituisce literatore che punta al // minimo del vettore Lelenco completo lo trovate sul Libro di testo in Appendice. Gli algoritmi funzionano anche sugli array standard (basta passare i puntatori invece degli iteratori)

11 val nodo next prev List Le locazioni di memoria non sono contigue –Lenta la ricerca, veloci inserimento ed estrazione... list top val nodo next prev val nodo next prev bottom

12 List list l; //dichiarazione Agli iteratori non possono essere applicate operazioni aritmetiche (es. it=(l.begin()+l.end())/2; ) l.sort(); // ordina una lista l.reverse() // inverte una lista

13 #include int main() { container; int val; for (int i=0; i<10; i++) { val = (int)((float)rand()/RAND_MAX*10); container.push_back(val); } ::iterator it1; for ( it1=container.begin(); it1!=container.end(); it1++) cout << "vector : " << *it1 << endl; return 0; } Esempio uso sequenze vector list

14 Contenitori associativi Sono contenitore di coppie ( key, value ) e possiedono un iteratore bidirezionale map –Viene richiesto loperatore < per la chiave –Gli elementi sono ordinati secondo la chiave

15 #include int main() { map amap; amap["Primo]=1; amap[Secondo]=2; cout << "Size : " << amap.size() << endl; amap["Terzo"]=3; amap["Quarto"]=4; cout << "Size : " << amap.size() << endl; map ::iterator it; for ( it=amap.begin(); it!=amap.end(); it++) cout first second << endl; cout second << endl; return 0; } #include int main() { map amap; amap["Primo]=1; amap[Secondo]=2; cout << "Size : " << amap.size() << endl; amap["Terzo"]=3; amap["Quarto"]=4; cout << "Size : " << amap.size() << endl; map ::iterator it; for ( it=amap.begin(); it!=amap.end(); it++) cout first second << endl; cout second << endl; return 0; } Esempio uso contenitori associativi