estruturas de dados estruturas de dados estruturas de...

22
Estruturas de Dados - STL Estruturas de Dados Estruturas de Dados - - STL STL Leandro Tonietto [email protected] Algoritmos e Estruturas de Dados em C++ Unisinos http://www.inf.unisinos.br/~ltonietto/jed/aed/EstruturaDados-STL.pdf mai-09 Baseada na apresentação do prof. João Bittencourt Baseada na apresentação do prof. João Bittencourt

Upload: tranxuyen

Post on 09-Nov-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Estruturas de Dados - STLEstruturas de Dados Estruturas de Dados -- STLSTL

Leandro Tonietto

[email protected]

Algoritmos e Estruturas de Dados em C++

Unisinos

http://www.inf.unisinos.br/~ltonietto/jed/aed/EstruturaDados-STL.pdf

mai-09

Baseada na apresentação do prof. João BittencourtBaseada na apresentação do prof. João Bittencourt

6-mai-09 Leandro Tonieto 2

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

STL - Standard Template LibraryBiblioteca Padrão de Gabaritos de C++

Desenvolvida por Alexander Stepanov e Meng Lee na HP.

Tornou-se padrão no C++

Possui uma série de estruturas de dados, iteradores e algoritmos padrões.

Evita-se “reinventar a roda”

O programador pode apropriar-se das classes da STL para criar seus sistemas

6-mai-09 Leandro Tonieto 3

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Pilhas com STL:

Incluir biblioteca stack:#include <stack>

Usar classe stack com tipo de pilha a ser

utilizado (esquema de templates):stack<int> pilha;

stack<Movimento> undo;

stack<Movimento> redo;

6-mai-09 Leandro Tonieto 4

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Pilhas com STL, métodos:Inserir um elemento no topo da pilha

push()

Remover elemento do topopop()

Não retorna o elemento removido

Obter elemento no topo da pilhatop()

Retorna o elemento sem removê-lo

Verifica se a pilha está vaziaempty()

Tamanho atual da pilhasize()

:: exemplo :::: exemplo ::

6-mai-09 Leandro Tonieto 5

Exercício com stack:

Faça o exercício de palíndromo utilizando pilhas da STL (stack).

O programa deve solicitar a digitação de uma frase por parte do usuário e verificar se a palavra é um palíndromo.

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

6-mai-09 Leandro Tonieto 6

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Filas com STL:

Incluir biblioteca queue:#include <queue>

Usar classe queue com tipo de fila a ser

utilizado (esquema de templates):queue<int> fila;

6-mai-09 Leandro Tonieto 7

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Filas com STL, métodos:Inserir um elemento no final da fila

push()

Remover elemento da filapop()

Não retorna o elemento removido

Obter elemento na frente da filafront()

Retorna o elemento sem removê-lo

Verifica se a fila está vaziaempty()

Tamanho atual da filasize()

:: exemplo :::: exemplo ::

6-mai-09 Leandro Tonieto 8

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Filas com prioridade (PRIQ) com STL:

Incluir biblioteca queue:#include <queue>

Usar classe priority_queue com tipo de

fila a ser utilizado (esquema de templates):priority_queue<int> fila;

6-mai-09 Leandro Tonieto 9

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Filas com prioridade com STL, métodos:Inserir um elemento na posição adequada da fila

push()

Remover elemento de maior prioridade da filapop()

Não retorna o elemento removido

Obter elemento de maior prioridade na filatop()

Retorna o elemento sem removê-lo

Verifica se a fila está vaziaempty()

Tamanho atual da filasize()

:: exemplo :::: exemplo ::

6-mai-09 Leandro Tonieto 10

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Filas com prioridade com STL, métodos:Inserir um elemento na posição adequada da fila

push()

Remover elemento de maior prioridade da filapop()

Não retorna o elemento removido

Obter elemento de maior prioridade na filatop()

Retorna o elemento sem removê-lo

Verifica se a fila está vaziaempty()

Tamanho atual da filasize()

:: exemplo :::: exemplo ::

6-mai-09 Leandro Tonieto 11

Exercício com prority_queue:Criar classe Mensagem com atributos texto e prioridade e com sobrecarga do operador <, onde uma mensagem é < que outra a prioridade dela é menor que da outra:

friend bool operator<(const Mensagem

&uma, const Mensagem &outra){ ... }

No main, criar uma fila com prioridades de mensagens, ler diversas mensagens e prioridades e adicionar na fila.

Imprimir todos os elementos da fila.

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

6-mai-09 Leandro Tonieto 12

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Iteradores:

Recurso poderoso da STL

Criar uma interdependência da estrutura de

dados e a forma de percorrê-la.

Pilhas (stack) e filas (queue) não oferecem

iteradores. Se oferecessem iriam corromper

o conceito dessas estruturas.

Conceitos fundamentais da STL

Containers

Iterators

6-mai-09 Leandro Tonieto 13

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Tipos de Iteradores

Entrada – ler um elemento do container. Do início

para o fim, um elemento de cada vez.

Saida - escrever um elemento no container. Do

início para o fim, um elemento de cada vez.

Para frente – combina os iteradores de entrada e saída. Mantém o estado atual.

Bidirecional – igual o para frente também podendo percorrer o container para trás.

Aleatório – o mesmo que o bidirecional podendo avançar ou recuar mais de uma posição

6-mai-09 Leandro Tonieto 14

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Operações com Iteradores (acumulativos)

Todos++p (pré-incrementa,avança)

p++ (pós-incrementa,avança)

Entrada*p (pegar o valor apontado por p)

p = p1

p == p1

p != p1

6-mai-09 Leandro Tonieto 15

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Operações com Iteradores (acumulativos)

Saída*p

p = p1

Para frente

Todas as operações de entrada e saída

Bidirecional--p (pré-decrementa,recua)

p-- (pós-decrementa,recua)

6-mai-09 Leandro Tonieto 16

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Operações com Iteradores (acumulativos)

Aleatóriop+=i incrementa p em i posições

p-=i decrementa p em i posições

p[i] o elemento que está na posição i

p<p1 se p está antes de p1 no container

p<=p1 se p está antes ou no mesmo lugar que p1 no container

p>p1 se p está depois de p1 no container

p>=p1 se p está depois ou no mesmo lugar que p1 no container

6-mai-09 Leandro Tonieto 17

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Como obter um iterador?list<Tipo>::iterator i;

i = lista.begin();

Pode ser usado:begin() - primeiro elemento

end() - um ponteiro “sujo” que indica o próximo elemento (depois do fim)

Exemplo:for(list<Tipo>::iterator it=lista.begin();

it!=lista.end(); it++){

// faz alguma coisa

}

6-mai-09 Leandro Tonieto 18

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Listas com STL:

Incluir biblioteca list:#include <list>

Usar classe list com tipo de lista a ser

utilizado (esquema de templates):list<int> lista;

list<Mensagem> listaMensagens;

6-mai-09 Leandro Tonieto 19

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Listas com STL, métodos:Inserir um elemento na lista

push_front() - insere no início

push_back() - insere no fim

Remover elemento da listapop_front()

pop_back()

Obter um elemento da listafront() ou back()

Verifica se a lista está vazia – empty()

Tamanho atual da lista - size()

:: exemplo :::: exemplo ::

6-mai-09 Leandro Tonieto 20

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Listas com STL, métodos:

splice(posicao,outraLista)

Remove os elementos da outraLista e

coloca-os antes da posicao

remove (valor)

Remove todos os elementos=valor da lista

unique

Remove elementos duplicados

merge (outraLista)

Fusão entre duas listas sem repetição

6-mai-09 Leandro Tonieto 21

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL

Listas com STL, métodos:reverse()

Inverte a lista

sort()

Ordena a lista em ordem ascendente

clear()

Remove todos os elementos da lista

insert(iterador, valor)

Inclui um valor na posição de um iterador. Retorna um

novo iterador

erase(iterador)

Apaga o valor apontado pelo iterador

6-mai-09 Leandro Tonieto 22

Exercício com list:

Criar classe Animal com atributos tipo e nome e com sobrecarga do operador <, onde um animal é < que outro quando o tipo de um é menor que outro e o nome de um é menor que outro.

No main, criar duas listas (uma de cachorros e outra de gatos) e preencher com objetos do tipo animal.

Fazer o merge das duas listas e imprimir.

Fazer o sort das duas listas e imprimir.

Inverter a lista e imprimir.

Estruturas de dados - STLEstruturas de dados Estruturas de dados -- STLSTL