14.03.2015 Views

Estruturas de dados com STL - Unisinos

Estruturas de dados com STL - Unisinos

Estruturas de dados com STL - Unisinos

SHOW MORE
SHOW LESS

Transforme seus PDFs em revista digital e aumente sua receita!

Otimize suas revistas digitais para SEO, use backlinks fortes e conteúdo multimídia para aumentar sua visibilidade e receita.

<strong>Estruturas</strong> <strong>de</strong> Dados - <strong>STL</strong><br />

Baseada na apresentação do prof. João Bittencourt<br />

Leandro Tonietto<br />

ltonietto@unisinos.br<br />

Algoritmos e <strong>Estruturas</strong> <strong>de</strong> Dados em C++<br />

<strong>Unisinos</strong><br />

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

mai-09


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

<strong>STL</strong> - Standard Template Library<br />

Biblioteca Padrão <strong>de</strong> Gabaritos <strong>de</strong> C++<br />

Desenvolvida por Alexan<strong>de</strong>r Stepanov e<br />

Meng Lee na HP.<br />

Tornou-se padrão no C++<br />

Possui uma série <strong>de</strong> estruturas <strong>de</strong> <strong>dados</strong>,<br />

iteradores e algoritmos padrões.<br />

Evita-se “reinventar a roda”<br />

O programador po<strong>de</strong> apropriar-se das<br />

classes da <strong>STL</strong> para criar seus sistemas<br />

6-mai-09 Leandro Tonieto 2


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Pilhas <strong>com</strong> <strong>STL</strong>:<br />

Incluir biblioteca stack:<br />

#inclu<strong>de</strong> <br />

Usar classe stack <strong>com</strong> tipo <strong>de</strong> pilha a ser<br />

utilizado (esquema <strong>de</strong> templates):<br />

stack pilha;<br />

stack undo;<br />

stack redo;<br />

6-mai-09 Leandro Tonieto 3


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Pilhas <strong>com</strong> <strong>STL</strong>, métodos:<br />

Inserir um elemento no topo da pilha<br />

push()<br />

Remover elemento do topo<br />

pop()<br />

Não retorna o elemento removido<br />

Obter elemento no topo da pilha<br />

top()<br />

Retorna o elemento sem removê-lo<br />

Verifica se a pilha está vazia<br />

empty()<br />

Tamanho atual da pilha<br />

size()<br />

:: exemplo ::<br />

6-mai-09 Leandro Tonieto 4


Exercício <strong>com</strong> stack:<br />

<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Faça o exercício <strong>de</strong> palíndromo utilizando<br />

pilhas da <strong>STL</strong> (stack).<br />

O programa <strong>de</strong>ve solicitar a digitação <strong>de</strong><br />

uma frase por parte do usuário e verificar<br />

se a palavra é um palíndromo.<br />

6-mai-09 Leandro Tonieto 5


Filas <strong>com</strong> <strong>STL</strong>:<br />

Incluir biblioteca queue:<br />

#inclu<strong>de</strong> <br />

<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Usar classe queue <strong>com</strong> tipo <strong>de</strong> fila a ser<br />

utilizado (esquema <strong>de</strong> templates):<br />

queue fila;<br />

6-mai-09 Leandro Tonieto 6


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Filas <strong>com</strong> <strong>STL</strong>, métodos:<br />

Inserir um elemento no final da fila<br />

push()<br />

Remover elemento da fila<br />

pop()<br />

Não retorna o elemento removido<br />

Obter elemento na frente da fila<br />

front()<br />

Retorna o elemento sem removê-lo<br />

Verifica se a fila está vazia<br />

empty()<br />

Tamanho atual da fila<br />

size()<br />

:: exemplo ::<br />

6-mai-09 Leandro Tonieto 7


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Filas <strong>com</strong> priorida<strong>de</strong> (PRIQ) <strong>com</strong> <strong>STL</strong>:<br />

Incluir biblioteca queue:<br />

#inclu<strong>de</strong> <br />

Usar classe priority_queue <strong>com</strong> tipo <strong>de</strong><br />

fila a ser utilizado (esquema <strong>de</strong> templates):<br />

priority_queue fila;<br />

6-mai-09 Leandro Tonieto 8


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Filas <strong>com</strong> priorida<strong>de</strong> <strong>com</strong> <strong>STL</strong>, métodos:<br />

Inserir um elemento na posição a<strong>de</strong>quada da fila<br />

push()<br />

Remover elemento <strong>de</strong> maior priorida<strong>de</strong> da fila<br />

pop()<br />

Não retorna o elemento removido<br />

Obter elemento <strong>de</strong> maior priorida<strong>de</strong> na fila<br />

top()<br />

Retorna o elemento sem removê-lo<br />

Verifica se a fila está vazia<br />

empty()<br />

Tamanho atual da fila<br />

size()<br />

:: exemplo ::<br />

6-mai-09 Leandro Tonieto 9


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Filas <strong>com</strong> priorida<strong>de</strong> <strong>com</strong> <strong>STL</strong>, métodos:<br />

Inserir um elemento na posição a<strong>de</strong>quada da fila<br />

push()<br />

Remover elemento <strong>de</strong> maior priorida<strong>de</strong> da fila<br />

pop()<br />

Não retorna o elemento removido<br />

Obter elemento <strong>de</strong> maior priorida<strong>de</strong> na fila<br />

top()<br />

Retorna o elemento sem removê-lo<br />

Verifica se a fila está vazia<br />

empty()<br />

Tamanho atual da fila<br />

size()<br />

:: exemplo ::<br />

6-mai-09 Leandro Tonieto 10


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Exercício <strong>com</strong> prority_queue:<br />

Criar classe Mensagem <strong>com</strong> atributos texto<br />

e priorida<strong>de</strong> e <strong>com</strong> sobrecarga do operador<br />


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Iteradores:<br />

Recurso po<strong>de</strong>roso da <strong>STL</strong><br />

Criar uma inter<strong>de</strong>pendência da estrutura <strong>de</strong><br />

<strong>dados</strong> e a forma <strong>de</strong> percorrê-la.<br />

Pilhas (stack) e filas (queue) não oferecem<br />

iteradores. Se oferecessem iriam corromper<br />

o conceito <strong>de</strong>ssas estruturas.<br />

Conceitos fundamentais da <strong>STL</strong><br />

Containers<br />

Iterators<br />

6-mai-09 Leandro Tonieto 12


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Tipos <strong>de</strong> Iteradores<br />

Entrada – ler um elemento do container. Do início<br />

para o fim, um elemento <strong>de</strong> cada vez.<br />

Saida - escrever um elemento no container. Do<br />

início para o fim, um elemento <strong>de</strong> cada vez.<br />

Para frente – <strong>com</strong>bina os iteradores <strong>de</strong> entrada e<br />

saída. Mantém o estado atual.<br />

Bidirecional – igual o para frente também po<strong>de</strong>ndo<br />

percorrer o container para trás.<br />

Aleatório – o mesmo que o bidirecional po<strong>de</strong>ndo<br />

avançar ou recuar mais <strong>de</strong> uma posição<br />

6-mai-09 Leandro Tonieto 13


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Operações <strong>com</strong> Iteradores (acumulativos)<br />

Todos<br />

++p (pré-incrementa,avança)<br />

p++ (pós-incrementa,avança)<br />

Entrada<br />

*p (pegar o valor apontado por p)<br />

p = p1<br />

p == p1<br />

p != p1<br />

6-mai-09 Leandro Tonieto 14


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Operações <strong>com</strong> Iteradores (acumulativos)<br />

Saída<br />

*p<br />

p = p1<br />

Para frente<br />

Todas as operações <strong>de</strong> entrada e saída<br />

Bidirecional<br />

--p (pré-<strong>de</strong>crementa,recua)<br />

p-- (pós-<strong>de</strong>crementa,recua)<br />

6-mai-09 Leandro Tonieto 15


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Operações <strong>com</strong> Iteradores (acumulativos)<br />

Aleatório<br />

p+=i incrementa p em i posições<br />

p-=i <strong>de</strong>crementa p em i posições<br />

p[i] o elemento que está na posição i<br />

p=p1 se p está <strong>de</strong>pois ou no mesmo lugar que<br />

p1 no container<br />

6-mai-09 Leandro Tonieto 16


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Como obter um iterador?<br />

list::iterator i;<br />

i = lista.begin();<br />

Po<strong>de</strong> ser usado:<br />

begin() - primeiro elemento<br />

end() - um ponteiro “sujo” que indica o próximo<br />

elemento (<strong>de</strong>pois do fim)<br />

Exemplo:<br />

for(list::iterator it=lista.begin();<br />

it!=lista.end(); it++){<br />

// faz alguma coisa<br />

}<br />

6-mai-09 Leandro Tonieto 17


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Listas <strong>com</strong> <strong>STL</strong>:<br />

Incluir biblioteca list:<br />

#inclu<strong>de</strong> <br />

Usar classe list <strong>com</strong> tipo <strong>de</strong> lista a ser<br />

utilizado (esquema <strong>de</strong> templates):<br />

list lista;<br />

list listaMensagens;<br />

6-mai-09 Leandro Tonieto 18


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Listas <strong>com</strong> <strong>STL</strong>, métodos:<br />

Inserir um elemento na lista<br />

push_front() - insere no início<br />

push_back() - insere no fim<br />

Remover elemento da lista<br />

pop_front()<br />

pop_back()<br />

Obter um elemento da lista<br />

:: exemplo ::<br />

front() ou back()<br />

Verifica se a lista está vazia –empty()<br />

Tamanho atual da lista -size()<br />

6-mai-09 Leandro Tonieto 19


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Listas <strong>com</strong> <strong>STL</strong>, métodos:<br />

splice(posicao,outraLista)<br />

Remove os elementos da outraLista e<br />

coloca-os antes da posicao<br />

remove (valor)<br />

Remove todos os elementos=valor da lista<br />

unique<br />

Remove elementos duplicados<br />

merge (outraLista)<br />

Fusão entre duas listas sem repetição<br />

6-mai-09 Leandro Tonieto 20


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Listas <strong>com</strong> <strong>STL</strong>, métodos:<br />

reverse()<br />

Inverte a lista<br />

sort()<br />

Or<strong>de</strong>na a lista em or<strong>de</strong>m ascen<strong>de</strong>nte<br />

clear()<br />

Remove todos os elementos da lista<br />

insert(iterador, valor)<br />

Inclui um valor na posição <strong>de</strong> um iterador. Retorna um<br />

novo iterador<br />

erase(iterador)<br />

Apaga o valor apontado pelo iterador<br />

6-mai-09 Leandro Tonieto 21


<strong>Estruturas</strong> <strong>de</strong> <strong>dados</strong> - <strong>STL</strong><br />

Exercício <strong>com</strong> list:<br />

Criar classe Animal <strong>com</strong> atributos tipo e nome e<br />

<strong>com</strong> sobrecarga do operador

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!