A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H. Colclough, Colorado Technical University Standard Template."— Transcrição da apresentação:

1 Pearson Education Slide 1

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

3 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

4 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

5 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

6 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

7 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

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

9 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;

10 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

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

12 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!

13 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

14 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

15 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

16 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

17 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

18 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

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

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

21 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

22 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 >

23 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

24 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

25 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 <

26 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

27 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

28 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

29 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

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

31 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

32 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

33 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

34 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)

35 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!

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

37 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

38 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

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

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

41 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

42 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

43 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

44 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

45 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


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

Apresentações semelhantes


Anúncios Google