Cap - PowerPoint PPT Presentation

1 / 45
About This Presentation
Title:

Cap

Description:

Title: PowerPoint Presentation Author: Fred Colclough Last modified by: Luiz Created Date: 10/30/2001 9:43:48 PM Document presentation format: Papel Carta (216 x 279 mm) – PowerPoint PPT presentation

Number of Views:84
Avg rating:3.0/5.0
Slides: 46
Provided by: FredCol1
Category:
Tags: algoritmos | cap

less

Transcript and Presenter's Notes

Title: Cap


1
(No Transcript)
2
Capítulo 19
Standard Template Library
Criado por Frederick H. Colclough, Colorado
Technical University
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
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ãopar
    a 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
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
    iteradorespróprios
  • Assim como cada tipo dado tem seu próprio
  • tipo ponteiro

6
Manipulando Iteradores
  • Lembre-se do uso dos operadores sobrecarregados
  • , --, , !
  • Assim, se p for uma variável iterador, p dá
    acessoaos 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 1o
    item em c
  • c.end() //Retorna um valor de teste para o
    final

7
Percorrendo em ciclos com Iteradores
  • Lembre-se da capacidade de percorrer em
    ciclosfor (pc.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ópriostipos iteradores
  • Embora todos sejam utilizados da mesma forma

8
Iteradores Utilizados com um Vector
Painel 19.1 página 551
9
Tipo Iterador para Vector
  • Iteradores para um vector de ints são do
    tipo stdvectorltintgtiterador
  • Iteradores para listas de ints são do
    tipo stdlistltintgtiterador
  • Vector está no std namespace, assim
    precisamosusing stdvectorltintgtiterador

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
Acesso Aleatório
Painel 19.2 página 554
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
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
    ouenviá-lo como saída, mas não se pode mudar o
  • elemento no container
  • Ex. p ltqualquercoisagt é ilegal!
  • Iterador Mutável
  • p pode ter um valor atribuído
  • Modifica o elemento correspondente no container
  • ex. p retorna um valor

14
Iteradores Reversos
  • Para percorrer em ciclos os elementos em
  • ordem inversa
  • Necessário um container com iteradores
    bidirecionais
  • Pode ser consideradoiterador pfor
    (pcontainer.end()p!container.begin()
    p--) cout ltlt p ltlt
  • Mas lembre-se end() é apenas uma sentinela,
  • begin() não!
  • Talvez funcione em alguns sistemas, mas não
  • na maioria

15
Iteradores Reversos Corretos
  • Para percorrer em ciclos corretamente os
  • elementos na ordem inversareverse_iterador
    pfor (rpcontainer.rbegin()rp!container.rend()
    rp) cout ltlt rp ltlt
  • rbegin()
  • Retorna um iterador localizado no último elemento
  • rend()
  • Retorna uma sentinela que marca o fim

16
Problemas com Compiladores
  • Alguns compiladores apresentam problemas
  • Com declarações de iterador
  • Considere a nossa utilizaçãousing
    stdvectorltchargtiteradoriterador p
  • Também poderíamos utilizarstdvectorltchargtite
    rador p
  • E outros
  • Tente várias formas se tiver problemas com o
    compilador

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

18
Containers Seqüenciais
  • Dispõe seus dados em uma lista
  • 1o 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
Dois Tipos de Listas
Painel 19.4 página 560
20
Utilizando a Classe Template list
Painel 19.5 página 561
21
Adaptadores de Container stack E queue
  • Adaptadores de container são classes template
  • Implementadas sobre outras classes
  • ExemploA classe template stack é implementada
    por padrãosobre a classe template deque
  • Sob a implementação de uma pilha há um deque em
  • que residem todos os dados
  • OutrasFila e Fila com prioridades

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
  • Exemplosclasse template stack? qualquer
    container seqüencial
  • Para uma priority_queue ? o padrão é um vector
    mas,poderia ser outros
  • Exemplo de implementaçãostackltint, vectorltintgtgt

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

24
Classe Template set
  • Container mais simples possível
  • Armazena elementos sem repetição
  • 1a 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
Mais sobre a Classe Template set
  • Projetada visando a eficiência
  • Armazena valores em ordem
  • Pode-se especificar a ordemsetltT, Orderinggt s
  • Ordering é uma relação de ordem bem-comportada
  • queretorna um valor bool
  • Se nenhuma ordem for especificada
  • usa o operador relacional lt

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

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ãoarmazenados 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
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
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 entradaT(10),
    T(10,000),
  • A Função T é chamada de tempo de execução

30
Tabela para a Função Tempo de Execução
Painel 19.14 página 570
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
Contando Operações
  • T(N) é dado por uma fórmula, comoT(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
Contando Operações Exemplo
  • int I 0bool encontrado falsewhile (( I lt
    N) ! encontrado) if (aI alvo)
    encontrado true else I
  • 5 operações por iteração do looplt, , !, ,
    ,
  • Depois de N iterações, mais três finais lt, ,
    !
  • Assim 6N5 operações quando o alvo não
  • for encontrado

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

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(N2)
  • Tempo de execução lagorítmico
  • O(log N)
  • Tipicamente logarítmo de base 2
  • Algorítmos muito rápidos!

36
Compararação entre Tempos de Execução
Painel 19.15 página 573
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
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
Função Genérica Find
Painel 19.16 página 574
40
Função Genérica Find (cont)
Painel 19.16 página 575
41
Algoritmos Modificadores de Seqüência
  • Funções da STL que modificam o conteúdode 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
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
Algoritmos de Ordenação
  • A STL contém duas funções template1- ordena um
    intervalo de elementos2- 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
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
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 containersque
    armazenam seus dados em ordem
  • A STL implementa algoritmos genéricos
  • Garantia de tempo de execução máximo
Write a Comment
User Comments (0)
About PowerShow.com