estruturas de dados estruturas de dados estruturas de...
TRANSCRIPT
Estruturas de Dados - STLEstruturas de Dados Estruturas de Dados -- STLSTL
Leandro Tonietto
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