Estruturas de dados com STL - Unisinos
Estruturas de dados com STL - Unisinos
Estruturas de dados com STL - Unisinos
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