Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H....

45
Pearson Education Slide 1

Transcript of Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 19 Criado por Frederick H....

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

Pearson Education Slide 1

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

Pearson Education Slide 2

Capítulo 19

Criado por Frederick H. Colclough, Colorado Technical University

Standard Template Library

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

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

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

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

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

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 iteradorespróprios

Assim como cada tipo dado tem seu próprio

tipo ponteiro

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

Pearson Education Slide 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

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

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ópriostipos iteradores

Embora todos sejam utilizados da mesma forma

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

Pearson Education Slide 8

Iteradores Utilizados com um VectorPainel 19.1página 551

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

Pearson Education Slide 9

Tipo Iterador para Vector Iteradores para um vector de “ints” são do

tipo:std::vector<int>::iterador

Iteradores para listas de “ints” são do tipo:std::list<int>::iterador

Vector está no std namespace, assim precisamos:using std::vector<int>::iterador;

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

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

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

Pearson Education Slide 11

Acesso AleatórioPainel 19.2página 554

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

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!

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

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 oelemento no container

Ex.: *p = <qualquercoisa>; é ilegal! Iterador Mutável:

*p pode ter um valor atribuído Modifica o elemento correspondente no container ex.: *p retorna um valor

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

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

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

Pearson Education Slide 15

Iteradores Reversos Corretos Para percorrer em ciclos corretamente

oselementos 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

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

Pearson Education Slide 16

Problemas com Compiladores Alguns compiladores apresentam

problemas Com declarações de iterador Considere a nossa utilização:

using std::vector<char>::iterador;…iterador p;

Também poderíamos utilizar:std::vector<char>::iterador p;

E outros… Tente várias formas se tiver problemas com o compilador

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

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 umparâmetro para um tipo específico de dadosa 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

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

Pearson Education Slide 18

Containers Seqüenciais Dispõe seus dados em uma lista

1o elemento, próximo elemento, … até o últimoelemento

Listas ligadas são exemplos de containerseqüencial

As listas ligadas que vimos eram ‘listas ligadassimples’

Um link por nó STL não tem ‘Listas ligadas simples’

somente ‘listas duplamente ligadas’: classe template list

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

Pearson Education Slide 19

Dois Tipos de ListasPainel 19.4 página 560

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

Pearson Education Slide 20

Utilizando a Classe Template listPainel 19.5

página 561

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

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ãosobre 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

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

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<int, vector<int>>

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

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 structchave: Número do INSS do funcionário

Os itens são encontrados com base na chave

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

Pearson Education Slide 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

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

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<T, Ordering> s; Ordering é uma relação de ordem bem-

comportadaque:retorna um valor bool

Se nenhuma ordem for especificada: usa o operador relacional <

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

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<string, int> numeroMap; Armazena em ordem, como set

O segundo valor não precisa ter nada a ver

com a ordem

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

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ã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’

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

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úciasdo código

A STL especifica certos detalhes sobre algoritmosque dão base às funções templates

Somente certos detalhes são especificados São então chamados de ‘algoritmos genéricos’

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

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’

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

Pearson Education Slide 30

Tabela para a Função Tempo de Execução

Painel 19.14 página 570

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

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

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

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’

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

Pearson Education Slide 33

Contando Operações: Exemplo int I = 0;

bool encontrado = false;while (( I < N) && ! encontrado)

if (a[I] == alvo) encontrado = true;

elseI++;

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

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

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) é otempo 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)

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

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(N2) Tempo de execução lagorítmico:

O(log N) Tipicamente ‘logarítmo de base 2’ Algorítmos muito rápidos!

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

Pearson Education Slide 36

Compararação entre Tempos de Execução

Painel 19.15página 573

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

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

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

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

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

Pearson Education Slide 39

Função Genérica FindPainel 19.16página 574

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

Pearson Education Slide 40

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

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

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

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

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

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

Pearson Education Slide 43

Algoritmos de Ordenação A STL contém duas funções template:

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

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

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

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

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