Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H. Colclough, Colorado Technical University Standard Template.

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 13 Criado por Frederick H. Colclough, Colorado Technical University Recursão.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 15 Criado por Frederick H. Colclough, Colorado Technical University Polimorfismo e Funções.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 12 Criado por Frederick H. Colclough, Colorado Technical University E/S de Arquivo e Streams.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 8 Criado por Frederick H. Colclough, Colorado Technical University Sobrecarga de Operador,
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 9 Criado por Frederick H. Colclough, Colorado Technical University Strings.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 10 Criado por Frederick H. Colclough, Colorado Technical University Ponteiros e Vetores.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 17 Criado por Frederick H. Colclough, Colorado Technical University Estruturas de Dados.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 3 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos das Funções.
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 14 Criado por Frederick H. Colclough, Colorado Technical University Herança.
Pearson Education Slide 1. Pearson Education Slide 2 Capítulo 2 Criado por Frederick H. Colclough, Colorado Technical University Fluxo de Controle.
Orientação a Objetos: Encapsulamento e Classificação
Orientação a Objetos: Encapsulamento e Classificação
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Walfredo Cirne walfredo.dsc.ufpb.br
Linguagem de Programação C++
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Capítulo 3 - Russell e Norvig
Programação orientada a objetos com Java
Curso de Programação em C++
Curso de C/C++ Avançado
RUP: Fluxo de Análise e Projeto
Lista Encadeada Circular Lista Duplamente Encadeada
Matrizes clássicas e vectores em C++
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,
Aula 12 Biblioteca padrão do C++ O que é? Composição
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Diagramas de Seqüência
DIAGRAMA DE COMPONENTES
Aula prática 12 Listas Encadeadas
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Classes, Objetos e Encapsulamento
COMO FUNCIONA A SIMULAÇÃO
Ponteiros Variáveis do tipo “ponteiro” armazenam endereços de memória
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 6 Vetores e Matrizes
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Conteúdos do tutorial O que é um Slide Mestre?
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Introdução e Busca Cega
Tipos Abstratos de Dados
+ Curso de C/C++ Aula 10 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Estruturas de Dados e Ordenação
Programação em C++ Compiladores
GP - Generic Programming Thiago Robert Felipe Pompeo.
Generic Programming Daniel Terzella Leandro Amancio
Programação Orientada à Objetos
Aula prática 14 Orientação a Objetos – C++ Parte 2
© 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
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
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
Aula Prática 13 Orientação a Objeto Monitoria
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 16 Criado por Frederick H. Colclough, Colorado Technical University Templates (Gabaritos)
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 1 Criado por Frederick H. Colclough, Colorado Technical University Fundamentos do C++
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
SWNE Uma Linguagem Baseada em Predicados Alex Abate Biral Número USP Orientador: Marco Dimas Gubitoso.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

Pearson Education Slide 1

Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H. Colclough, Colorado Technical University Standard Template Library

Pearson Education Slide 3 Objetivos de Estudo Iteradores Iteradores Constantes e Mutáveis Iteradores Reversos Containers Containers Seqüenciais Adaptadores de container stack E queue Algoritmos Genéricos Notação Big-O Algoritmos Modificadores de seqüencia, conjunto e de ordenação

Pearson Education Slide 4 Introdução Lembre-se das estruturas de dados pilhas e filas Construímos nossas próprias versões Existe uma grande coleção de estruturas-padrão para guardar dados É útil se ter implementações-padrão portáteis dessas estruturas de dados! Standard Template Library (STL) Inclui bibliotecas para tais estruturas de dados Como as classes containers: pilhas e filas

Pearson Education Slide 5 Iteradores Lembre-se: generalização de um ponteiro Costuma ser implementado utilizando um ponteiro! Abstração de iteradores Projetados para ocultar detalhes da implementação Fornecem uma interface uniforme ao longo de diferentes classes container Cada classe container tem tipos iteradores próprios Assim como cada tipo dado tem seu próprio tipo ponteiro

Pearson Education Slide 6 Manipulando Iteradores Lembre-se do uso dos operadores sobrecarregados: ++, --, ==, != * Assim, se p for uma variável iterador, *p dá acesso aos dados apontados por p Classe template vector Tem tudo relativo a sobrecarga Também tem os membros begin() e end() c.begin();// Retorna um iterador para o 1 o item em c c.end();// Retorna um valor de teste para o final

Pearson Education Slide 7 Percorrendo em ciclos com Iteradores Lembre-se da capacidade de percorrer em ciclos: for (p=c.begin();p!=c.end();p++) processe *p //*p é o item dado atual Quadro Geral até aqui… Lembre-se: Cada tipo container na STL tem seus próprios tipos iteradores Embora todos sejam utilizados da mesma forma

Pearson Education Slide 8 Iteradores Utilizados com um Vector Painel 19.1 página 551

Pearson Education Slide 9 Tipo Iterador para Vector Iteradores para um vector de ints são do tipo: std::vector ::iterador Iteradores para listas de ints são do tipo: std::list ::iterador Vector está no std namespace, assim precisamos: using std::vector ::iterador;

Pearson Education Slide 10 Tipos de Iteradores Containers diferentes Iteradores diferentes Iteradores Vectors Forma mais geral Todas as operações funcionam com iteradores vectors Container vector bom para ilustrar iteradores

Pearson Education Slide 11 Acesso Aleatório Painel 19.2 página 554

Pearson Education Slide 12 Categorias de Iteradores Iteradores de avanço: ++ atua sobre o iterador Iteradores bidirecionais: Ambos: ++ e -- atuam sobre o iterador Iteradores de acesso aleatório: ++, --, e de acesso aleatório funcionam com o iterador Estas são categorias de iteradores, não tipos!

Pearson Education Slide 13 Iteradores Constantes e Mutáveis O comportamento do operador de desreferenciação dita: Iterador Constante: * Produz uma versão somente de leitura do elemento Pode-se usar *p para atribuí-lo a uma variável ou enviá-lo como saída, mas não se pode mudar o elemento no container Ex.: *p = ; é ilegal! Iterador Mutável: *p pode ter um valor atribuído Modifica o elemento correspondente no container ex.: *p retorna um valor

Pearson Education Slide 14 Iteradores Reversos Para percorrer em ciclos os elementos em ordem inversa Necessário um container com iteradores bidirecionais Pode ser considerado: iterador p; for (p=container.end();p!=container.begin(); p--) cout << *p << ; Mas lembre-se: end() é apenas uma sentinela, begin() não! Talvez funcione em alguns sistemas, mas não na maioria

Pearson Education Slide 15 Iteradores Reversos Corretos Para percorrer em ciclos corretamente os elementos na ordem inversa: reverse_iterador p; for (rp=container.rbegin();rp!=container.rend(); rp++) cout << *rp << ; rbegin() Retorna um iterador localizado no último elemento rend() Retorna uma sentinela que marca o fim

Pearson Education Slide 16 Problemas com Compiladores Alguns compiladores apresentam problemas Com declarações de iterador Considere a nossa utilização: using std::vector ::iterador; … iterador p; Também poderíamos utilizar: std::vector ::iterador p; E outros… Tente várias formas se tiver problemas com o compilador

Pearson Education Slide 17 Containers Classes Container da STL Diferentes categorias de estruturas de dados Como listas, filas e pilhas Cada uma é uma classe template com um parâmetro para um tipo específico de dados a ser armazenado ex.: Listas de int s, doubles ou tipos minhaClasse Cada uma tem seus próprios iteradores Uma talvez tenha iteradores bidirecionais, outra talvez tenha somente iteradores de avanço Mas todos os operadores e membros têm o mesmo significado

Pearson Education Slide 18 Containers Seqüenciais Dispõe seus dados em uma lista 1 o elemento, próximo elemento, … até o último elemento Listas ligadas são exemplos de container seqüencial As listas ligadas que vimos eram listas ligadas simples Um link por nó STL não tem Listas ligadas simples somente listas duplamente ligadas: classe template list

Pearson Education Slide 19 Dois Tipos de Listas Painel 19.4 página 560

Pearson Education Slide 20 Utilizando a Classe Template list Painel 19.5 página 561

Pearson Education Slide 21 Adaptadores de Container stack E queue Adaptadores de container são classes template Implementadas sobre outras classes Exemplo: A classe template stack é implementada por padrão sobre a classe template deque Sob a implementação de uma pilha há um deque em que residem todos os dados Outras: Fila e Fila com prioridades

Pearson Education Slide 22 Especificando Adaptadores de Container Debaixo de uma classe template adaptadora, temos uma classe container padrão Mas pode-se especificar um container-base diferente Exemplos: classe template stack qualquer container seqüencial Para uma priority_queue o padrão é um vector mas, poderia ser outros Exemplo de implementação: stack >

Pearson Education Slide 23 Containers Associativos Container associatvo : base de dados muito simples Armazenam dados Cada item dado tem uma chave Exemplo: dado: registro de um funcionário como struct chave: Número do INSS do funcionário Os itens são encontrados com base na chave

Pearson Education Slide 24 Classe Template set Container mais simples possível Armazena elementos sem repetição 1 a inserção coloca elementos no conjunto Cada elemento é sua própria chave Capacidades: Acrescentar elementos Excluir elementos Perguntar se um elemento está no conjunto

Pearson Education Slide 25 Mais sobre a Classe Template set Projetada visando a eficiência Armazena valores em ordem Pode-se especificar a ordem: set s; Ordering é uma relação de ordem bem-comportada que: retorna um valor bool Se nenhuma ordem for especificada: usa o operador relacional <

Pearson Education Slide 26 Classe Template Map Uma função dada como um conjunto de pares ordenados Para cada valor primeiro, no máximo um valor segundo no mapa Exemplo de declaração map: map numeroMap; Armazena em ordem, como set O segundo valor não precisa ter nada a ver com a ordem

Pearson Education Slide 27 Eficiência A STL foi projetada tendo a eficiência como um de seus objetivos mais importantes Visam a excelência Exemplo: os elementos em set e map são armazenados em ordem para buscas mais rápidas Funções-membros das classes templates: Tempo máximo de execução assegurado Chamado notação Big-O. Um índice de eficiência

Pearson Education Slide 28 Algoritmos Genéricos Funções templates básicas Lembre-se da definição de algoritmo Conjunto de instruções para executar uma tarefa Pode ser representado em qualquer linguagem Geralmente imaginado em pseudocódigo Considerado uma abstração do código Fornece detalhes importantes, mas não as minúcias do código A STL especifica certos detalhes sobre algoritmos que dão base às funções templates Somente certos detalhes são especificados São então chamados de algoritmos genéricos

Pearson Education Slide 29 Tempo de Execução Quão rápido é o programa? Segundos? Considere: grandes ou pequenas entradas? Produzindo uma tabela Baseada no tamanho da entrada A tabela é chamada de função em matemática Com argumentos e valores de retorno! O argumento é o tamanho da entrada: T(10), T(10,000), … A Função T é chamada de tempo de execução

Pearson Education Slide 30 Tabela para a Função Tempo de Execução Painel página 570

Pearson Education Slide 31 Considerando um Programa de Ordenação Mais rápido com um conjunto de dados de entrada menores? Talvez Talvez dependa do estado do conjunto Na maioria das vezes já ordenado? Considere o pior caso de tempo de execução T(N) é o tempo levado com a lista mais difícil A lista que leva o maior tempo para se ordenar

Pearson Education Slide 32 Contando Operações T(N) é dado por uma fórmula, como: T(N) = 5N + 5 Em entradas de tamanho N o programa levará 5N + 5 unidades de tempo Deve ser independente do computador usado Não importa quão rápido os computadores são Não podemos estimar o tempo Em vez disso, contamos as operações

Pearson Education Slide 33 Contando Operações: Exemplo int I = 0; bool encontrado = false; while (( I < N) && ! encontrado) if (a[I] == alvo) encontrado = true; else I++; 5 operações por iteração do loop: <, &&, !, [ ], ==, ++ Depois de N iterações, mais três finais: <, &&, ! Assim: 6N+5 operações quando o alvo não for encontrado

Pearson Education Slide 34 Notação Big-O Lembre-se: 6N+5 operações no pior caso Expresso em notação Big-O Algum fator c constante onde c(6N+5) é o tempo de execução atual c é diferente em sistemas diferentes Dizemos que o código é executado em tempo O(6N+5) Mas sempre consideramos os números mais elevados Termos com o expoente mais elevado Aqui: O(N)

Pearson Education Slide 35 Terminologia Big-O Tempo de execução linear: O(N) – diretamente proporcional ao tamanho da entrada N Tempo de execução quadrático: O(N 2 ) Tempo de execução lagorítmico: O(log N) Tipicamente logarítmo de base 2 Algorítmos muito rápidos!

Pearson Education Slide 36 Compararação entre Tempos de Execução Painel página 573

Pearson Education Slide 37 Tempos de Execução no Acesso a Containers O(1) – Operação sempre constante: Inserções ao final ou na frente de um vector Inserções em um deque Inserções em uma lista O(N) Inserção ou eliminação de um elemento arbitrário em um vector ou deque (N é o número de elementos) O(log N) Encontrar algo em um set ou map

Pearson Education Slide 38 Algoritmos Não-modificadores de Seqüência Funções templates que atuam sobre containers NÃO modificam o conteúdo dos containers Função genérica find Exemplo típico pode ser utilizada com quaisquer classes containers seqüenciais da STL

Pearson Education Slide 39 Função Genérica Find Painel página 574

Pearson Education Slide 40 Função Genérica Find (cont) Painel página 575

Pearson Education Slide 41 Algoritmos Modificadores de Seqüência Funções da STL que modificam o conteúdo de um container Lembre-se: acrescentar ou remover um elemento de um container pode afetar quaisquer dos outros iteradores! list e slist garantem que nenhuma mudança será efeutada vector e deque não dão tal garantia Sempre preste atenção quais iteradores são seguros para serem modificados/não-modificados

Pearson Education Slide 42 Algoritmos Set (Conjunto) Funções genéricas de operações de conjunto da STL Algoritmos genéricos pressupõem que os containers armazenem seus elementos em ordem Containers set, map, multiset e multimap Armazenam dados em ordem, assim, todas as funções se aplicam Outros, como vector, não são ordenados Essas funções não devem ser utilizadas

Pearson Education Slide 43 Algoritmos de Ordenação A STL contém duas funções template: 1- ordena um intervalo de elementos 2- intercala dois intervalos de elementos ordenados Garantem um tempo de execução de O(N log N) Nenhuma ordenação pode ser mais rápida Essa função garante que o algoritmo de ordenação é o mais rápido possível

Pearson Education Slide 44 Sumário 1 Iterador é uma generalização de um ponteiro Usado para se mover através dos elementos de um container Classes container com iteradores têm: Funções-membros end() e begin() que retornam valores de iteradores tais que podem processar todos os dados no container Principais tipos de iteradores: Avanço, bidirecional e de acesso aleatório Dado o iterador constante p, *p é uma versão somente de leitura do elemento

Pearson Education Slide 45 Sumário 2 Dado o iterador mutável p *p pode ter um valor atribuído Um container bidirecional possui iteradores reversos que permitem a seu código percorrer em ciclos Containers principais na STL: list, vector e deque Pilha e fila: classes container adaptadoras set, map, multiset e multimap são containers que armazenam seus dados em ordem A STL implementa algoritmos genéricos Garantia de tempo de execução máximo