Aula 12 Biblioteca padrão do C++ O que é? Composição

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H. Colclough, Colorado Technical University Standard Template.
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados.
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Estruturas de Dados Marcio Gonçalves.
Banco de Dados Prof. Antonio.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
TAD Deque ATAI.
Uma Introdução.
Estrutura de Dados e Algoritmos e Programação e Computadores II
ESTRUTURAS DO TIPO FILA
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Árvores.
HeapSort Filas de Prioridade – Heap
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
Listas Ligadas – Conceitos Avançados
Classificação e Pesquisa de Dados
A.4. Trabalhando com elementos de biblioteca STL – Standard Template Libraby Disponibiliza um conjunto de classes templates, provendo algoritmos eficientes.
AED – Algoritmos e Estruturas de Dados
Árvores Binárias de Pesquisa (ABP)
LISTAS DUPLAMENTE LIGADAS Qual o problema com listas simples? - a partir de uma posição p só dá para caminhar numa direção - se precisar acessar o nó anterior,
Instrutor: Nilo Menezes
Curso de C/C++ Avançado
Robson Godoi / Sandra Siebra
Ponteiros.
2002/2003 Programação Orientada para Objectos 1 Aula 7 - Herança Herança pública: relação é um. A relação tem um. A relação é composto por um. Ponteiros,
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
Programação Baseada em Objectos Desenho de TAD
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
Métodos Programação II
Listas Encadeadas.
Revisão da Linguagem C.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Aula prática 12 Listas Encadeadas
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
+ Curso de C/C++ Aula 10 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Aula 3 Listas, pilhas, filas.
Estruturas de Dados e Ordenação
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
GP - Generic Programming Thiago Robert Felipe Pompeo.
Pilhas Profa. Nádia Félix.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.
2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Módulo 9 Strings , Coleções e I/O
Exercícios de Pilha e Fila
Lista Linear Base para outras estruturas
Coleções em Java - Parte 2
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
1 TAD Fila com Prioridade -FCP ATAI. 2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade.
Aula Prática 12 Listas Encadeadas Monitoria
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
Estrutura de Dados Aula 3 - Listas
Estrutura de dados Pilhas e filas
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Transcrição da apresentação:

Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos Functores 2002/2003 Programação Orientada para Objectos

C++ Padrão Normalização de 1989 a 1997 Publicação em 1998 Nova versão em 2004? Norma de 750 páginas, publicada pelo ISO (Organização Internacional de Normalização) “Information Technology – Programming Languages – C++” (ISO/IEC 14882-1998) 2002/2003 Programação Orientada para Objectos

Biblioteca padrão do C++ Parte da norma é uma biblioteca: E/S Cadeias de caracteres Contentores Algoritmos Cálculo numérico Internacionalização 2002/2003 Programação Orientada para Objectos

STL (Standard Template Library) Cerne da biblioteca padrão Fornece ferramentas para manipular colecções de dados Separação clara entre dados e operações Componentes genéricos Novo nível de abstracção 2002/2003 Programação Orientada para Objectos

Componentes da STL Contentores (dados) Gestão de colecções de itens de um dado tipo Iteradores (“cola” entre contentores e algoritmos) Percorrem contentores Contentores vistos como sequências Interface comum, independente do tipo de contentor Algoritmos (operações comuns sobre sequências) Usados para processar os itens dos contentores Functores Necessidades especiais Suplementos, restrições ou configurações para algoritmos e operações 2002/2003 Programação Orientada para Objectos

Contentores Sequenciais Associativos Posição de itens não depende do seu valor! (ordem extrínseca) Exemplos: std::vector, std::deque e std::list Associativos Posição de itens depende do seu valor e ordem exacta depende de relação de ordem (ordem intrínseca) Relação de ordem por omissão: operador < Exemplos: std::set, std::multiset, std::map e std::multimap 2002/2003 Programação Orientada para Objectos

vector Implementação típica: matrizes dinâmicas Acesso aleatório (directo e eficiente usando indexação) Adição e remoção eficientes de itens na traseira #include <vector> Operações comuns Construir: vector<int>() Indexar: operator[]() Saber se está vazio: empty() Saber dimensão: size() Acrescentar atrás: push_back() Remover último item: pop_back() 2002/2003 Programação Orientada para Objectos

deque (Double-Ended QUEue) Implementação típica: matrizes dinâmicas Acesso aleatório Adição e remoção eficientes de itens na traseira e na frente #include <deque> Operações comuns: Construir: deque<double>() Indexar: operator[]() Saber se está vazia: empty() Saber comprimento: size() Acrescentar à frente/atrás: push_front() e push_back() Remover primeiro/último item: pop_front() e pop_back() 2002/2003 Programação Orientada para Objectos

list (lista) Implementação típica: cadeias duplamente ligadas Acesso sequencial Inserção e remoção eficiente de itens em qualquer posição #include <list> Algumas operações: Construir: list<float>() Saber se está vazia: empty() Saber comprimento: size() Saber primeiro item: front() Saber último item: back() … 2002/2003 Programação Orientada para Objectos

set (conjunto) e multiset (colecção) Ordem intrínseca (posição dos itens depende do seu valor) Implementação típica: árvores binárias Conjuntos: sem repetições de itens Colecções: com repetições Não se podem modificar os itens #include <set> ou #include <multiset> Operações comuns: Contruir: set<int>() ou multiset<int>() Saber se está vazio: empty() Saber cardinalidade: size() Inserir item: insert() Remover item: erase() Saber número de itens com valor: count() 2002/2003 Programação Orientada para Objectos

map (mapa) e multimap (multimapa) Itens são pares (chave, valor) – e.g., pair<int, string> Ordem intrínseca (posição dos pares depende da sua chave) Mapas: sem repetição de chaves Multimapas: com repetição #include <map> ou #include <multimap> Operações comuns: Construir: map<int, string>() ou multimap<int, string>() Saber se está vazio: empty() Saber número de pares: size() Indexar usando chave: operator[]() Inserir par: insert() Remover pares: erase() Saber número de pares com chave: count() 2002/2003 Programação Orientada para Objectos

Contentores especiais Implementação típica: contentores anteriores Sem iteradores stack (pilhas) Contentor que gere os seus elementos de acordo com a política LIFO queue (filas) Contentor que gere os seus elementos de acordo com a política FIFO priority_queue (filas prioritárias) Frente da fila é item mais prioritário Por omissão, prioridade comparada usando operador < 2002/2003 Programação Orientada para Objectos

Que contentor usar? Use vector (contentor mais simples) Insere ou remove itens à frente e atrás? Use deque Insere ou remove itens a meio? Use list Procura com frequência itens pelo seu valor? Use set ou multiset Deseja separar itens em chave e valor? Use map ou multimap 2002/2003 Programação Orientada para Objectos

Iteradores Permitem definir sequências Permitem percorrer contentores Referenciam itens Operadores fundamentais: Saber conteúdo ou item referenciado: * Avançar: ++ Comparar: == e != Atribuir: = 2002/2003 Programação Orientada para Objectos

Iteradores Operações de obtenção de iteradores (apenas contentores não-especiais): begin() end() … Há sempre dois tipos de iteradores: contentor::iterator contentor::const_iterator begin() end() 2002/2003 Programação Orientada para Objectos

Tipos de iteradores Bidireccionais De acesso aleatório Avançam e recuam (++ e --) Contentores: list, set, multiset, map e multimap De acesso aleatório São também bidireccionais Permitem acesso aleatório aos itens da sequência Permitem aritmética mais completa de iteradores: saltos, distâncias, ... Contentores: vector e deque vector<int>::const_iterator i = v.begin(); i += 2; cout << i[3] << endl; cout << *i << endl; 2002/2003 Programação Orientada para Objectos

Iteradores especiais De inserção Iteradores associados a um canal Na traseira de um contentor Na frente de um contentor Em local dado Iteradores associados a um canal Inserem ou extraem itens de canais automaticamente Iteradores reversos Avançar recua, recuar avança 2002/2003 Programação Orientada para Objectos

Iteradores especiais (exemplo) list<int> l; for(int i = 0; i != 10; ++I) l.push_back(i); vector<int> v; copy(l.begin(), l.end(), back_inserter(v)); set<int> c; copy(l.begin(), l.end(), inserter(c, c.begin())); copy(l.begin(), l.end(), ostream_iterator<int>(cout, “ “)); cout << endl; copy(l.rbegin(), l.rend(), ostream_iterator<int>(cout, “\n“)); 2002/2003 Programação Orientada para Objectos

Algoritmos #include <algorithm> #include <numeric> Rotinas genéricas sobre sequências Sequências definidas por iteradores Relação com contentores através de iteradores: não são operações membro! Sufixos dos nomes dos algoritmos: _if – têm predicado como argumento, usando-o para identificar itens _copy – copiam para um destino ao actuar, não alterando o original 2002/2003 Programação Orientada para Objectos

Tipos de algoritmos Não modificadores Modificadores De remoção De mutação De ordenação Para sequências de itens intrinsecamente ordenadas Numéricos 2002/2003 Programação Orientada para Objectos

sort() e reverse() int main() { vector<int> v; v.push_back(13); sort(v.begin(), v.end()); copy(v.begin(), v.end(), ostream_iterator<int>(cout, “\n“)); reverse(v.begin(), v.end()); } 2002/2003 Programação Orientada para Objectos

replace() e unique_copy() int main() { list<int> l; l.push_back(7); l.push_back(9); l.push_back(10); replace(l.begin(), l.end(), 7, 44); copy(l.begin(), l.end(), ostream_iterator<int>(cout, “\n“)); unique_copy(l.begin(), l.end(), ostream_iterator<int>(cout, “\n“)); } 2002/2003 Programação Orientada para Objectos

Classes functoras Classes cujas instâncias se comportam como rotinas Instâncias (functores) podem ser usadas como rotinas Têm de ter como operação membro operator() Definição: class X { public: tipo_de_devolução operator() (parâmetros) const; … }; X fo; fo(argumentos); // ou fo.operator()(argumentos); // ou tipo_de_devolução resultado = fo(argumentos); 2002/2003 Programação Orientada para Objectos

Functores Tipos Vantagens face a ponteiros para rotinas Predicados Aritméticos Vantagens face a ponteiros para rotinas Podem ter atributos: “rotinas” com estado! Maior possibilidade de utilizar código em-linha 2002/2003 Programação Orientada para Objectos

Functores pré-definidos negate<T>() plus<T>() minus<T>() multiplies<T>() divides<T>() modulus<T>() equal_to<T>() not_equal_to<T>() less<T>() greater<T>() less_equal<T>() greater_equal<T>() logical_not<T>() logical_and<T>() logical_or<T>() 2002/2003 Programação Orientada para Objectos

Adaptadores de functores Combinam functores com functores, functores com valores e functores com rotinas Adaptadores de functores pré-definidos: bind1st() bind2nd() not1() not2() 2002/2003 Programação Orientada para Objectos

Functores: Aumentando a STL template <typename T> class Mostra : public unary_function<T, void> { public: Mostra(ostream& out); void operator()(T const& t) const; private: ostream& out; }; Mostra<T>::Mostra(ostream& out) : out(out) {} void Mostra<T>::operator()(T const& t) const { out << t << endl; } 2002/2003 Programação Orientada para Objectos

Como usar o novo functor int main() { vector<int> v; v.push_back(2); v.push_back(5); v.push_back(9); // Algoritmo for_each for_each(v.begin(), v.end(), Mostra<int>(cout)); } 2002/2003 Programação Orientada para Objectos