Standard Template Library (STL)
|
|
|
- Valdomiro Candal Bento
- 8 Há anos
- Visualizações:
Transcrição
1 Standard Template Library (STL) BCC Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP
2 Introdução Considerando a utilidade do reuso de software e também a utilidade das estruturas de dados e algoritmos utilizados por programadores a Standard Template Library (STL) foi adicionada à biblioteca padrão C++; A STL define componentes genéricos reutilizáveis poderosos que implementam várias estruturas de dados e algoritmos que processam estas estruturas Basicamente, a STL é composta de contêineres, iteradores e algoritmos 1/57
3 Introdução (cont.) Contêineres são templates de estruturas de dados 2/57
4 Introdução (cont.) Contêineres são templates de estruturas de dados Possuem métodos associados a eles 2/57
5 Introdução (cont.) Contêineres são templates de estruturas de dados Possuem métodos associados a eles Iteradores são semelhantes a ponteiros, utilizados para percorrer e manipular os elementos de um contêiner 2/57
6 Introdução (cont.) Algoritmos são as funções que realizam operações tais como buscar, ordenar e comparar elementos ou contêineres inteiros 3/57
7 Introdução (cont.) Algoritmos são as funções que realizam operações tais como buscar, ordenar e comparar elementos ou contêineres inteiros Existem aproximadamente 85 algoritmos implementados na STL; 3/57
8 Introdução (cont.) Algoritmos são as funções que realizam operações tais como buscar, ordenar e comparar elementos ou contêineres inteiros Existem aproximadamente 85 algoritmos implementados na STL; A maioria utiliza iteradores para acessar os elementos de contêineres. 3/57
9 C++11 Os padrões mais recentes da linguagem C++ sao: C++11, C++14 e C++17 O C++11 estendeu a STL Facilidades multithreading; Tabelas hash; Expressões regulares; Números aleatórios; Novos algoritmos. Para compilar códigos que utilizem o C++11 use a flag -std=c++11 4/57
10 Contêineres Os contêineres são divididos em três categorias principais: 5/57
11 Contêineres Os contêineres são divididos em três categorias principais: Contêineres Sequenciais: estruturas de dados lineares. 5/57
12 Contêineres Os contêineres são divididos em três categorias principais: Contêineres Sequenciais: estruturas de dados lineares. Contêineres Associativos: 5/57
13 Contêineres Os contêineres são divididos em três categorias principais: Contêineres Sequenciais: estruturas de dados lineares. Contêineres Associativos: Estruturas de dados não lineares 5/57
14 Contêineres Os contêineres são divididos em três categorias principais: Contêineres Sequenciais: estruturas de dados lineares. Contêineres Associativos: Estruturas de dados não lineares Pares chave/valor 5/57
15 Contêineres Os contêineres são divididos em três categorias principais: Contêineres Sequenciais: estruturas de dados lineares. Contêineres Associativos: Estruturas de dados não lineares Pares chave/valor Adaptadores de Contêineres: são contêineres sequenciais, porém, em versões restringidas. 5/57
16 Funções Membro Comuns STL Funções membro para todos os contêineres Construtor padrão, construtor de cópia, destrutor empty size = < <= > >= ==!= swap 6/57
17 Funções Membro Comuns STL (cont.) Funções para contêineres de primeira classe begin, end rbegin, rend erase, clear max size 7/57
18 Iteradores Funcionalidade similar a dos ponteiros Apontam para elementos em contêineres de primeira classe Certas operações com iteradores são as mesmas para todos os contêineres * desreferencia ++ aponta para o próximo elemento begin() retorna o iterador do primeiro elementos end() retorna iterador do elemento depois do último 8/57
19 Tipos de Iteradores Suportados Contêineres sequencias vector: acesso aleatório deque: acesso aleatório list: bidireccional Contêineres associativos (todos bidireccionais) set multiset map multimap 9/57
20 Tipos de Iteradores Suportados (cont.) Contêineres adaptados (não há suporte a iteradores) stack queue priority queue 10/57
21 Contêineres Sequenciais Tipo vector deque list Descrição Inserções e remoções no final, acesso direto a qualquer elemento. Fila duplamente ligada, inserções e remoções no início ou no final, sem acesso direto a qualquer elemento. Lista duplamente ligada, inserção e remoção em qualquer ponto. 11/57
22 Vector Definido na biblioteca #include<vector> Estrutura de dados com alocação de memória sequencial Mais eficientes se inserções forem feitas apenas no final Usado quando os dados devem ser ordenados e facilmente acessível 12/57
23 Vector (cont.) Quando memória estiver esgotada Aloca maior área sequencial de memória Copia ele mesmo lá Desaloca memória antiga Tem iteradores de acesso aleatório 13/57
24 Vector (cont.) Declaração std :: vector<type> v; Iteradores std :: vector<type>:: const iterator itervar ; const iterator não pode modificar elementos std :: vector<type>:: iterator itervar; Visita elementos do inicio ao fim Usa begin para receber ponto de início Usa end para receber ponto final 14/57
25 Vector (cont.) std :: vector<type>:: reverse iterator itervar; Visita elementos na ordem reversa (fim para o início) Usa rbegin para receber ponto de início na ordem reversa Usa rend para receber ponto final na ordem reversa 15/57
26 Vector (cont.) Funções v.push back(value) Adiciona elemento ao final (encontrado em todos os contêineres sequenciais) v. size () Número de elementos no vector v. capacity () Quanto o vector pode inserir antes de realocar memória 16/57
27 Vector (cont.) vector<type> v(a, a + SIZE) Cria vector v com elementos do array a até o (não incluindo) a + SIZE v. insert ( iterator, value ) Insere value antes do posicionamento do iterator v. insert ( iterator, array, array + SIZE) Insere elementos do array (até, mas não incluindo array + SIZE) antes do posicionamento do iterator 17/57
28 Vector (cont.) v. erase( iterator ) Remove elemento do contêiner v. erase( iter1, iter2 ) Remove elementos começando do iter1 e até (não incluindo) iter2 v. clear () Apaga todo o contêiner 18/57
29 Vector (cont.) Operações de funções v. front (), v.back() Retorna uma referência para o primeiro e último elemento no contêiner, respectivamente v[elementnumber] = value; Atribui value a um elemento v. at(elementnumber)= value; Como acima, com checagem de intervalo 19/57
30 Vector (cont.) #i n c l u d e <v e c t o r >... v e c t o r <i n t > vec ; // vec.size() == 0 vec. push back ( 4 ) ; vec. push back ( 1 ) ; vec. push back ( 8 ) ; // vec:4,1,8 vec.size() == 3 //operaçoes com vector cout << vec [ 2 ] ; // 8 (não verifica se pos. válida) cout << vec. at ( 2 ) ; // 8 (lança exceção se pos. inválida)... 20/57
31 Vector (cont.) // mostrando o vector f o r ( i n t i = 0 ; i < vec. s i z e ( ) ; i ++) cout << vec [ i ] << " " ; f o r ( v e c t o r <i n t >:: i t e r a t o r i t r = vec. b e g i n ( ) ; i t r!= vec. end ( ) ; ++i t r ) cout << i t r << " " ; f o r ( auto i t r = vec. b e g i n ( ) ; i t r!= vec. end ( ) ; ++i t r ) cout << i t r << " " ; f o r ( i n t i t : vec ) cout << i t << " " ;... 21/57
32 Vector (cont.)... v e c t o r <double > V ; d o u b l e v a l u e = 1. 1 ; f o r ( i n t i = 0 ; i < 5 ; i ++){ V. push back ( v a l u e ) ; v a l u e += 1. 1 ; } cout << "\ nbackward : " ; f o r ( v e c t o r <double >:: r e v e r s e i t e r a t o r i t r = V. r b e g i n ( ) ; i t r!= V. rend ( ) ; ++i t r ) cout << i t r << " " ; cout << "\nauto Backward : " ; f o r ( auto i t r = V. r b e g i n ( ) ; i t r!= V. rend ( ) ; ++i t r ) cout << i t r << " " ;... 22/57
33 Vector (cont.) // Vector é um arranjo sequencial alocado dinamicamente i n t p = &vec [ 0 ] ; // funções membros comuns entre os contêineres i f ( vec. empty ( ) ) cout << "Vazio" ; cout << vec. s i z e ( ) ; // 3 v e c t o r <i n t > vec2 ( vec ) ; vec. c l e a r ( ) ; // remove todos os elementos; vec.size() == 0 vec2. swap ( vec ) ; // troca os dados entre vec e vec2 23/57
34 Vector (cont.) Propriedades da classe vector Rápida inserção/remoção de dados no final do vetor: O(1) Lenta inserção/remoção de dados no inicio ou no meio: O(n) Pesquisa lenta: O(n) 24/57
35 Contêiner Sequencial list Cabeçalho: #include<list> Inserção/remoção eficiente em qualquer lugar no contêiner Lista duplamente encadeada (dois ponteiros por nó) Um para elemento anterior outro para elemento posterior Iteradores bidirecionais Declaração: std :: list <type> name; 25/57
36 Contêiner Sequencial list (cont.) Funções list para o objeto L L. sort () Ordena em ordem crescente L. splice ( iterator, otherobject ); Insere valores de otherobject em L antes do iterador e remove os objetos de otherobject L.merge( otherobject ) Remove otherobject e o insere em L, ordenado L.unique() Remove elementos duplicados 26/57
37 Contêiner Sequencial list (cont.) L.swap(otherObject); Troca conteúdo de l com o de otherobject L.assign(iterator1, iterator2); Substitui conteúdo com elementos no intervalo dos iteradores L.remove(value); Apaga todas as instâncias de value 27/57
38 Contêiner Sequencial list (cont.) #i n c l u d e <l i s t > #i n c l u d e <i t e r a t o r > u s i n g namespace s t d ; template <typename T> v o i d p r i n t L i s t ( l i s t <T> & L ) { f o r ( auto elem : L ) cout << elem << " " ; cout << e n d l ; } template <typename T> v o i d r e v e r s e p r i n t L i s t ( c o n s t l i s t <T> & L ) { f o r ( l i s t <T>:: r e v e r s e i t e r a t o r i t = L. r b e g i n ( ) ; i t!= L. rend ( ) ; i t ++) cout << i t << " " ; cout << e n d l ; } 28/57
39 Contêiner Sequencial list (cont.) i n t main ( ) { c o n s t i n t SIZE = 4 ; i n t a r r a y [ SIZE ] = { 2, 6, 4, 8 } ; l i s t < i n t > v a l u e s ; // cria lista de ints l i s t < i n t > o t h e r V a l u e s ; // cria lista de ints // insere itens em values v a l u e s. p u s h f r o n t ( 1 ) ; v a l u e s. p u s h f r o n t ( 2 ) ; v a l u e s. push back ( 4 ) ; v a l u e s. push back ( 3 ) ; cout << "values contains : " ; p r i n t L i s t ( v a l u e s ) ; // 2, 1, 4, 3 29/57
40 Contêiner Sequencial list (cont.) v a l u e s. s o r t ( ) ; // ordena values c o u t << "\ nvalues after sorting contains : " ; p r i n t L i s t ( v a l u e s ) ; // 1,2,3,4 // insere elementos do array em othervalues o t h e r V a l u e s. i n s e r t ( o t h e r V a l u e s. b e g i n ( ), a r r a y, a r r a y + SIZE ) ; c o u t << "\ nafter insert, othervalues contains : " ; p r i n t L i s t ( o t h e r V a l u e s ) ; //2,6,4,8 // remove elementos othervalues e insere no fim de values v a l u e s. s p l i c e ( v a l u e s. end ( ), o t h e r V a l u e s ) ; c o u t << "\ nafter splice, values contains : " ; p r i n t L i s t ( v a l u e s ) ; //1,2,3,4,2,6,4,8 v a l u e s. s o r t ( ) ; // classifica values c o u t << "\ nafter sort, values contains : " ; p r i n t L i s t ( v a l u e s ) ; // 1,2,2,3,4,4,6,8 30/57
41 Contêiner Sequencial list (cont.) // insere elementos do array em othervalues o t h e r V a l u e s. i n s e r t ( o t h e r V a l u e s. b e g i n ( ), a r r a y, a r r a y + SIZE ) ; o t h e r V a l u e s. s o r t ( ) ; c o u t << "\ nafter insert, othervalues contains : " ; p r i n t L i s t ( o t h e r V a l u e s ) ; // 2,4,6,8 // remove elementos othervalues e insere em values na ordem classificada v a l u e s. merge ( o t h e r V a l u e s ) ; cout << "\nafter merge :\n values contains : " ; p r i n t L i s t ( v a l u e s ) ; //1,2,2,2,3,4,4,4,6,6,8,8 cout << "\n othervalues contains : " ; p r i n t L i s t ( o t h e r V a l u e s ) ; // Lista vazia v a l u e s. p o p f r o n t ( ) ; // remove elemento da parte da frente v a l u e s. pop back ( ) ; // remove elemento da parte de trás c o u t << "\ nafter pop_front and pop_back :\ n values contains : " ; p r i n t L i s t ( v a l u e s ) ; // 2,2,2,3,4,4,4,6,6,8 31/57
42 Contêiner Sequencial list (cont.) v a l u e s. unique ( ) ; // remove elementos duplicados c o u t << "\ nafter unique, values contains : " ; p r i n t L i s t ( v a l u e s ) ; //2,3,4,6,8 // permuta elementos de values e othervalues v a l u e s. swap ( o t h e r V a l u e s ) ; cout << "\nafter swap :\n values contains : " ; p r i n t L i s t ( v a l u e s ) ; // Lista vazia cout << "\n othervalues contains : " ; p r i n t L i s t ( o t h e r V a l u e s ) ; // 2,3,4,6,8 // substitui conteúdo de values por elementos othervalues v a l u e s. a s s i g n ( o t h e r V a l u e s. b e g i n ( ), o t h e r V a l u e s. end ( ) ) ; c o u t << "\ nafter assign, values contains : " ; p r i n t L i s t ( v a l u e s ) ; //2,3,4,6,8 32/57
43 Contêiner Sequencial list (cont.) // remove elementos othervalues e insere em values na ordem classificada v a l u e s. merge ( o t h e r V a l u e s ) ; c o u t << "\ nafter merge, values contains : " ; p r i n t L i s t ( v a l u e s ) ; //2,2,3,3,4,4,6,6,8,8 v a l u e s. remove ( 4 ) ; // remove todos os 4s c o u t << "\ nafter remove( 4 ), values contains : " ; p r i n t L i s t ( v a l u e s ) ; //2,2,3,4,6,6,8,8 cout << e n d l ; r e t u r n 0 ; 33/57
44 Contêiner Sequencial deque deque ( deek ): fila com final duplo (double-ended queue) Header #include<deque> Acesso indexado usando [] Inserção/remoção eficiente na frente e no final 34/57
45 Contêiner Sequencial deque (cont.) Mesmas operações básicas como vector Entretanto, também possui como nas listas push front (insere na frente do deque) pop front (remove da frente) 35/57
46 Contêiner Sequencial deque (cont.) deque<i n t > dew = {4, 6, 7 } ; deq. p u s h f r o n t ( 2 ) ; // deq: 2,4,6,7 deq. push back ( 3 ) ; // deq: 2,4,6,7,3 cout << deq [ 1 ] ; // 4 36/57
47 Contêiner Sequencial deque (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e <deque> #i n c l u d e <a l g o r i t h m > #i n c l u d e <i t e r a t o r > i n t main ( ) { s t d : : deque< d o u b l e > v a l u e s ; // cria deque de doubles s t d : : o s t r e a m i t e r a t o r < d o u b l e > output ( cout, " " ) ; // insere elementos em values v a l u e s. p u s h f r o n t ( 2. 2 ) ; v a l u e s. p u s h f r o n t ( 3. 5 ) ; v a l u e s. push back ( 1. 1 ) ; 37/57
48 Contêiner Sequencial deque (cont.) cout << "values contains : " ; // utiliza o operador de subscrito para obter elementos de values f o r ( u n s i g n e d i n t i = 0 ; i < v a l u e s. s i z e ( ) ; i++ ) cout << v a l u e s [ i ] << ; v a l u e s. p o p f r o n t ( ) ; // remove o primeiro elemento c o u t << "\ nafter pop_front, values contains : " ; s t d : : copy ( v a l u e s. b e g i n ( ), v a l u e s. end ( ), output ) ; // utiliza o operador de subscrito para modificar elemento na localização 1 v a l u e s [ 1 ] = 5. 4 ; c o u t << "\ nafter values[ 1 ] = 5.4, values contains : " ; s t d : : copy ( v a l u e s. b e g i n ( ), v a l u e s. end ( ), output ) ; cout << e n d l ; r e t u r n 0 ; } // fim de main 38/57
49 Contêineres Adaptados stack, queue e priority queue Não são contêineres de primeira classe Não suportam iteradores Programador pode selecionar implementação Funções membro push e pop 39/57
50 Adaptador Stack Cabeçalho #include <stack> Inserções e remoções em uma extremidade Estrutura de dados last-in, first-out (LIFO) Pode usar vector, list, ou deque (padrão) 40/57
51 Adaptador Stack (cont.) Declarações stack <type, v e c t o r <type> > mystack ; stack <type, l i s t <type> > myotherstack ; stack <type> a n o t h e r S t a c k ; // padrão deque vector, list Implementação de stack (padrão deque) Não muda comportamento, apenas desempenho (deque e vector mais rápidos) 41/57
52 Adaptador Stack (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e <stack > // definição de stack adapter #i n c l u d e <v e c t o r > // definição da template de classe vector #i n c l u d e < l i s t > // definição da template de classe list u s i n g namespace s t d ; // pushelements function-template prototype template < typename T > v o i d pushelements (T &s t a c k R e f ) ; // protótipo de template de função popelements template < typename T > v o i d popelements (T &s t a c k R e f ) ; i n t main ( ) { // pilha com deque subjacente padrão s t d : : stack < i n t > i n t D e q u e S t a c k ; // pilha com vetor subjacente s t d : : stack < i n t, v e c t o r < i n t > > i n t V e c t o r S t a c k ; // pilha com lista subjacente s t d : : stack < i n t, l i s t < i n t > > i n t L i s t S t a c k ; 42/57
53 Adaptador Stack (cont.) // insere os valores 0-9 em cada pilha cout << " Pushing onto intdequestack : " ; pushelements ( i n t D e q u e S t a c k ) ; c o u t << "\ npushing onto intvectorstack : " ; pushelements ( i n t V e c t o r S t a c k ) ; cout << "\ npushing onto intliststack : " ; pushelements ( i n t L i s t S t a c k ) ; cout << e n d l << e n d l ; // exibe e remove elementos de cada pilha cout << " Popping from intdequestack : " ; popelements ( i n t D e q u e S t a c k ) ; c o u t << "\ npopping from intvectorstack : " ; popelements ( i n t V e c t o r S t a c k ) ; cout << "\ npopping from intliststack : " ; popelements ( i n t L i s t S t a c k ) ; cout << e n d l ; r e t u r n 0 ; } // fim de main 43/57
54 Adaptador Stack (cont.) // insere elementos no objeto stack que stackref referencia template < typename T > v o i d pushelements (T &s t a c k R e f ) { f o r ( i n t i = 0 ; i < 1 0 ; i ++) { s t a c k R e f. push ( i ) ; // insere o elemento na pilha cout << s t a c k R e f. top ( ) << ; // visualiza (e exibe) elemento superior } // fim do for } // fim da função pushelements // remove elementos do objeto stack que stackref referencia template < typename T > v o i d popelements (T &s t a c k R e f ) { w h i l e (! s t a c k R e f. empty ( ) ) { cout << s t a c k R e f. top ( ) << ; // visualiza (e exibe) elemento superior s t a c k R e f. pop ( ) ; // remove elemento superior } // fim do while } // fim da função popelements 44/57
55 Adaptador Stack (cont.) Pushing onto i n t D e q u e S t a c k : Pushing onto i n t V e c t o r S t a c k : Pushing onto i n t L i s t S t a c k : Popping from i n t D e q u e S t a ck : Popping from i n t V e c t o r S t a c k : Popping from i n t L i s t S t a c k : /57
56 Adaptador queue Cabeçalho #include<queue> Inserções no final, remoções na frente Estrutura de dados first-in-first-out (FIFO) Implementada com list ou deque (padrão) s t d : : queue<double > v a l u e s ; 46/57
57 Adaptador queue (cont.) Funções push( elemento ) Mesmo que push back, adicionar no final pop( element ) Implementado com pop front, remove da frente empty() e size() 47/57
58 Adaptador queue (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e <queue> // definição da classe queue adaptadora u s i n g namespace s t d ; i n t main ( ) { s t d : : queue< d o u b l e > v a l u e s ; // fila com doubles // insere elementos nos valores de fila v a l u e s. push ( 3. 2 ) ; v a l u e s. push ( 9. 8 ) ; v a l u e s. push ( 5. 4 ) ; cout << " Popping from values: " ; // remove elementos da fila w h i l e (! v a l u e s. empty ( ) ) { cout << v a l u e s. f r o n t ( ) << ; // visualiza elemento da frente da fila v a l u e s. pop ( ) ; // remove o elemento } // fim do while r e t u r n 0 ; } // fim de main 48/57
59 Adaptador priority queue Cabecalho #include<queue> Inserções acontecem ordenadas, remoções da frente Implementada com vector (padrão) ou deque Elemento de prioridade mais alta é sempre removido primeiro Algoritmo heapsort coloca elementos maiores na frente less <T> padrão, programador especifica outro comparador 49/57
60 Adaptador priority queue (cont.) Funções push(value), pop(value) top(): vê elemento do topo size() e empty() 50/57
61 Adaptador priority queue (cont.) Diferente dos anteriores, a classe template priority queue possui três parâmetros: Tipo dos elementos Contêiner Classe de comparação: Pode ser uma classe implementando uma função ou um ponteiro para uma função 51/57
62 Adaptador priority queue (cont.) #i n c l u d e <i o s t r e a m > #i n c l u d e <queue> // definição do adaptador priority queue u s i n g namespace s t d ; i n t main ( ) { s t d : : p r i o r i t y q u e u e < d o u b l e > p r i o r i t i e s ; // cria priority queue // insere elementos em prioridades p r i o r i t i e s. push ( 3. 2 ) ; p r i o r i t i e s. push ( 9. 8 ) ; p r i o r i t i e s. push ( 5. 4 ) ; cout << " Popping from priorities : " ; // remove elemento de priority queue w h i l e (! p r i o r i t i e s. empty ( ) ) { cout << p r i o r i t i e s. top ( ) << ; // visualiza elemento superior } // fim do while r e t u r n 0 ; } // fim de main p r i o r i t i e s. pop ( ) ; // remove elemento superior 52/57
63 Exemplo com função de comparação #i n c l u d e <i o s t r e a m > #i n c l u d e <queue> #i n c l u d e <c s t d l i b > // rand() #i n c l u d e <f u n c t i o n a l > // function u s i n g namespace s t d ; template <typename T> v o i d pushelements (T& f i l a ) { cout << e n d l ; i n t num ; f o r ( i n t i = 0 ; i < 1 0 ; i ++){ num = rand ( ) ; f i l a. push (num) ; cout << num << " " ; } } 53/57
64 Exemplo com função de comparação (cont.) template <typename T> v o i d popelements (T& f i l a ) { cout << e n d l ; w h i l e (! f i l a. empty ( ) ) { cout << f i l a. top ( ) << " " ; f i l a. pop ( ) ; } } c l a s s compare { p u b l i c : b o o l o p e r a t o r ( ) ( i n t a, i n t b ) { r e t u r n a < b ; } ; } ; b o o l comparefunc ( i n t a, i n t b ) { r e t u r n a < b ; } ; 54/57
65 Exemplo com função de comparação (cont.) i n t main ( ) { // forma 1 p r i o r i t y q u e u e <i n t, p queuedeque1 ; deque<i n t >, compare> // forma 2 p r i o r i t y q u e u e <i n t, deque<i n t >, s t d : : f u n c t i o n <b o o l ( i n t, i n t )>> p queuedeque2 ( comparefunc ) ; // forma 3 auto cmp = [ ] ( i n t a, i n t b ) { r e t u r n a < b ; } ; p r i o r i t y q u e u e <i n t, deque<i n t >, d e c l t y p e (cmp)> p queuedeque3 (cmp) ; // forma 4 p r i o r i t y q u e u e <i n t, deque<i n t >, f u n c t i o n <b o o l ( i n t a, i n t b )>> p queuedeque4 ( [ ] ( i n t a, i n t b ) { r e t u r n a < b ; } ) ; 55/57
66 Exemplo com função de comparação (cont.) cout << "\n Pushing \n" ; pushelements ( p queuedeque1 ) ; pushelements ( p queuedeque2 ) ; pushelements ( p queuedeque3 ) ; pushelements ( p queuedeque4 ) ; } cout << "\n Poping \n" ; popelements ( p queuedeque1 ) ; popelements ( p queuedeque2 ) ; popelements ( p queuedeque3 ) ; popelements ( p queuedeque4 ) ; r e t u r n 0 ; 56/57
67 FIM 57/57
Laboratório de programação II
Laboratório de programação II Standard Template Library (STL) Edson Moreno [email protected] http://www.inf.pucrs.br/~emoreno Standard Template Library Biblioteca padronizada de funções Oferece um
Estruturas de Dados - STL
Estruturas de Dados - STL Baseada na apresentação do prof. João Bittencourt Leandro Tonietto [email protected] Algoritmos e Estruturas de Dados em C++ Unisinos http://www.inf.unisinos.br/~ltonietto/jed/aed/estruturadados-stl.pdf
Aula 07. Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset
Logo Aula 07 Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset 2 Estrutura de Dados Estrutura de dados já foi vista em vetores, que foi uma maneira de manipular várias informações (variáveis
Orientação a Objetos - Programação em C++
OO Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 14: As classes List e Vector da STL (Standard Template Library). Prof. Jean Marcelo SIMÃO Classe List Uma classe Predefinida na
Programação Orientada a Objectos - P. Prata, P. Fazendeiro
Java Collections Framework (JCF) Uma coleção (collection) é um objeto que agrupa vários elementos. A JCF consiste numa arquitetura para representação e manipulação de coleções. Contém: - Um conjunto de
Templates. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP
Templates BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Introdução Os templates ou gabaritos fornecem a base para existência da programação genérica
Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017.
Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017 4.9. Delegates Exercício 217 4.9. Delegates Repare nas diferenças destes dois casos com e sem Delegates:
Física Computacional 17 STL
Física Computacional 17 STL 1. Contentores 2. Iteradores 3. Algoritmos [email protected] Física Computacional - MEFT 2009/10 P. Bicudo, P. Martins & M. Cardoso 1 A STL (standard template library)
Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010
Filas de prioridade Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Qual a Utilidade das Filas de Prioridade? Trabalhos maiores devem ser executados no fim (mesmo que não tenha sido o último
Estruturas de Dados. Túlio Toffolo BCC402 Aula 02 Algoritmos e Programação Avançada
Estruturas de Dados Túlio Toffolo [email protected] www.toffolo.com.br BCC402 Aula 02 Algoritmos e Programação Avançada Estruturas de dados elementares Arranjos (arrays) Pilhas (stacks) Filas (queues)
STL significa Standard Template Library. É uma biblioteca que contém algumas estruturas de dados, como árvore binária e lista encadeada.
STL significa Standard Template Library. É uma biblioteca que contém algumas estruturas de dados, como árvore binária e lista encadeada. Estas estruturas são chamadas de Containers. Elas armazenam coleções
PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 11: Exercício Integrador (parte 2)
PCS3111 Laboratório de Programação Orientada a Objetos para Engenharia Elétrica Aula 11: Exercício Integrador (parte 2) Escola Politécnica da Universidade de São Paulo Agenda 1. Container List 2. Iterators
Biblioteca STL aplicada à Maratona de
Biblioteca STL aplicada à Maratona de Programação MEDITEC 5 29 de Maio de 2014 Introdução Estruturas de Dados Pilhas Filas Pares Vectores Listas e Iterators Árvores Balanceadas Strings Mapas Algoritmos
Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler
Aula 2 Listas Lineares Sequenciais prof Leticia Winkler 1 Conteúdo Revisão de Vetor Definição Declaração Acesso dos Elementos Inicialização dos Elementos Exemplo Vetor e Função Lista Linear Operações com
Estruturas de Dados Encadeadas
CURSO: Ciência da Computação DATA: / / 2016 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 14 APRESENTAÇÃO Na aula de hoje vamos apresentar e discutir conceitos
ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS
ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS TEORIA CONJUNTO ORDENADO DE ITENS NO QUAL NOVOS ITENS PODEM SER INSERIDOS E A PARTIR DO QUAL PODEM SER ELIMINADOS ITENS EM UMA
Guia de Consulta Rápida C++ STL. Joel Saade. Novatec Editora
Guia de Consulta Rápida C++ STL Joel Saade Novatec Editora Guia de Consulta Rápida C++ STL de Joel Saade Copyright 2006 da Novatec Editora Ltda. Todos os direitos reservados. É proibida a reprodução desta
Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB
Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB [email protected] Listas e Filas Estruturas de Dados 2 Estrututuras de dados lineares Pilhas (stack) Estrutura de dados onde a inserção
CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações
CES-11 Pilhas Definição Operações Filas Definição Operações Deques Definição Operações PILHAS, FILAS E DEQUES As listas lineares admitem inserção e eliminação em qualquer posição. Pilhas, filas e deques
REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE PILHAS E FILAS Vanessa Braganholo Estruturas de Dados e Seus Algoritmos PILHAS E FILAS São tipos especiais de listas com disciplina restrita de acesso Acesso Consulta Inserção Remoção Disciplina
S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas
ESTRUTURA DE DADOS DEBORAH FERREIRA S U M Á R I O Definição de Estrutura de Dados 1 Vetores 2 Listas Ligadas 4 Pilhas 6 Filas 8 D E F I N I Ç Ã O D E E S T R U T U R A D E D A D O S Estruturas de dados
Estruturas de Dados Filas
Estruturas de Dados Filas Roteiro Introdução Definição de Fila (Queue) Aplicações Operações sobre Fila Implementação de Fila Com vetores Com listas encadeadas Exercícios Introdução Estamos acostumados
Lista de Exercícios 04
Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Disciplina: BCC202 - Estruturas de Dados I Professor: Túlio Toffolo (www.decom.ufop.br/toffolo)
Programação Orientada a Objetos para Redes de Computadores
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel PARTE 2 Programação em C++ - Arrays e Ponteiros Arrays Estruturas de dados que
Aula 8- Standard Template Library. Arthur Ribacki Gabriel Portal Leonardo Chatain Luiz Fernando Scheidegger Rosália Schneider
Aula 8- Standard Template Library Arthur Ribacki Gabriel Portal Leonardo Chatain Luiz Fernando Scheidegger Rosália Schneider STL Motivação... int int_array = 5; char **vetor = new char*[int_array]; for(int
Pilhas e Filas. Nádia Félix e Hebert Coelho
Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados Série de Livros Didáticos - Informática - UFRGS Pilhas e filas Listas lineares
Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler
Aula 7 e 8 Filas e suas Aplicações Prof. Leticia Winkler 1 Definição de Fila (Queue) São estruturas de dados do tipo FIFO (first-in first-out) - o primeiro elemento a ser inserido, será o primeiro a ser
Estruturas de Dados Pilhas, Filas, Listas
PMR2300 Escola Politécnica da Universidade de São Paulo Introdução Estruturas de dados são objetos que armazenam dados de forma eficiente, oferecendo certos serviços para o usuário (ordenação eficiente
Exemplos. Alocação Dinâmica de Pilhas. Pilhas. Pilhas. Implementação Seqüencial X Encadeada. SCE 182 Algoritmos e Estruturas de Dados I
SCE 182 Algoritmos e Estruturas de Dados I Uma pilha é uma lista linear em que a inserção ou eliminação de elementos somente pode ocorrer em uma das extremidades, que é chamada de TOPO da PILHA. D C B
Lista de Exercícios sobre Listas Implementadas por Encadeamento
Lista de Exercícios sobre Listas Implementadas por Encadeamento 1) Se você tem de escolher entre uma representação por lista encadeada ou uma representação usando posições contíguas de memória para um
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
SCC Algoritmos e Estruturas de Dados I
SCC 202 - Algoritmos e Estruturas de Dados I TAD Pilha Lembrem...TADs são tipos definidos em termos de seu comportamento e não de sua representação (que pode variar na busca de eficiência) 12/8/2010 Pilha
Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io)
Pilhas e Filas Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Pilhas 2 Pilhas (Stack) Estrutura similar às listas lineares que vimos na última aula [Mais Simples]
Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões
Edital de Seleção 023/2018 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua
Pilhas Acesso. Pilha. Fila. Listas lineares especiais. Pilhas e Filas. Listas lineares especiais mais usuais. Disciplina restrita
Listas lineares especiais s Acesso consulta inserção remoção Disciplina restrita de acesso Disciplina restrita acesso permitido somente em alguns nós Listas lineares especiais mais usuais LIFO Last In
Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!
Rafael D. Ribeiro, M.Sc. [email protected] http://www.rafaeldiasribeiro.com.br Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0! Fatorial de 0 = 1 Recursividade 1 Recursividade
Estruturas de Dados Pilhas, Filas, Listas
Estruturas de Dados Pilhas, Filas, Listas Fabio Gagliardi Cozman Thiago Martins PMR3201 Escola Politécnica da Universidade de São Paulo Estruturas de Dados Pilhas, Filas, Listas Introdução Estruturas de
Vectores em C++ Classe vector: Introdução
Vectores em C++ FEUP - MIEEC Programação 2-2008/2009 Classe vector: Introdução A classe vector é uma alternativa à representação de array primitivo Template de classe necessário especificar o tipo dos
Aplicações de vetores
O TAD Vetor O TAD Vetor extende a noção de arranjo (array) armazenando sequências de objetos arbitrários Um elemento pode ser acessado, inserido ou removido através da especificação de sua colocação (rank)
Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,
Filas Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing, pelo uso da CPU Algoritmos e Estruturas de Dados I José
Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP
Pilhas Algoritmos e Estruturas de Dados I Nesta aula veremos o ADT pilha Uma pilha é usada em muitas situações tais como avaliação de expressões aritméticas, chamada e retorno de procedimentos e funções
Aula 17: Funções (Parte III) e Introdução a Vetores
Aula 17: Funções (Parte III) e Introdução a Vetores Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2018/2 Departamento de Computação UFOP Aula de Hoje 1 Exemplos
Algoritmos e Estruturas de Dados II IEC013
Algoritmos e Estruturas de Dados II IEC013 TAD, Pilhas e Filas Prof. César Melo Todos os créditos ao Prof. Leandro Galvão TAD: Definição SE programa = definição de um tipo de dados + operação sobre dados
