CURSO DE MARATONA DE PROGRAMAÇÃO
ICT-Unifesp
 Iremos utilizar a STL (biblioteca padrão do C++).
 Por que?
 STL possui várias estruturas implementadas.
 Estudos dizem que você irá escrever menos e poderá obter mais !!
 Lembre-se:
 A STL ajuda, mas não faz milagres!
 Estude os mais diversos algoritmos e técnicas de programação.
 Use a STL de forma adequada.
 Exemplo: uso vetor (vector) ou lista (list) ?
 Resolva (muitos=2)^10 problemas.
2
 O objetivo é maratona de programação.
 A maratona é democrática, você pode programar até em Java!
 Com a palavra ViniGodoy:
3
 Relax, não é preciso dominar a linguagem...
 Só precisamos saber um pouquinho...
 Você pode misturar C e C++.
 Ou pode fazer o código totalmente em C e salvar como .cpp :D
 Seu foco maior será nos algoritmos e técnicas para resolver os problemas.
 C++ e STL te ajudarão a não ter maiores dores de cabeça!
4
5
 No C fazíamos:
6
 No C++ utilizando STL:
 Não esquecer de incluir: #include <vector>
7
 Ok, escrevemos menos quando fizemos em C, mas você pode passar para o
construtor a quantidade de elementos, será inicializado tudo com 0 e aí você só
atribui os valores:
8
 O vector possui várias operações.
 Vimos a função push_back que insere elementos, mas existem outras...
 A função erase apaga elementos:
 A função clear que remove todos os elementos:
v.clear();
9
 Pergunta: remove o último elemento ?
10
 Pergunta: remove o último elemento ?
11
 Corrigindo...
 O begin() aponta para o primeiro elemento e o end() não aponta para o último
elemento, entendeu? Nem eu!
12
 Utilizando C/C++:
13
 String do C++ também é legal, você pode passar o conteúdo no construtor:
14
 Mas eu tenho uma string do C! Ok ...
15
 Mas eu tenho uma string do C, quero passar para C++ e quero imprimir a string
do C++ com o saudoso printf! Ok ......
16
 As funções mantêm um certo padrão.
 Lembra das funções size() e erase() ?
 Elas existem para string! O que é impresso na última linha?
17
 Copiando uma string (saudades da strcpy ??) :
18
 Desafio: o que imprimirá cada um dos códigos?
19
 #include <list>
20
 Acessando os elementos:
21
 Lembra da pilha que você teve que implementar em estrutura de dados?
 Sem sofrimento, basta você incluir: #include <stack>
22
 A remoção é feita com a função pop():
23
 Verificar se a pilha está vazia:
24
 Lembra da fila do banco? Inclua: #include <queue>
25
 Utilize a função back() para saber quem é o último da fila:
26
 Quer associar elementos por chave/valor? #include <map>
27
 Verificando se uma chave existe:
28
 Não temos a chave “blabla”, o que será impresso?
29
 Percorrendo o map...
 A impressão ocorre na ordem em que os elementos foram inseridos?
30
 Permite inserir elementos no início e no final:
 #include <queue> ou #include <deque>
31
 Percorrendo:
32
 E se fosse uma fila, funcionaria o código abaixo?
33
 E se fosse uma fila, funcionaria o código abaixo?
34
 O set não permite elementos repetidos. Basta incluir: #include <set>
 Os elementos são mantidos em ordem crescente.
35
 Mas eu preciso de um set com elementos repetidos em ordem crescente.
 Seus problemas acabaram: multiset
36
 Ouvi dizer que em C++ você programa com classe...
 Struct é quase igual a uma classe... O código abaixo compila?
37
 Agora sim código abaixo compila!
 Os membros por default de uma classe são privados, então colocamos o public:
38
 O código abaixo compila!
 Os membros por default de uma struct são públicos.
39
 Alguns algoritmos estão implementados para você utilizar.
 #include <algorithm>
 Ordenar os elementos em ordem crescente: sort()
40
 Imprimir todas as permutações: next_permutation()
41
 Busca binária: binary_search()
42
43
 Tem quase tudo aqui: http://www.cplusplus.com/reference
 Curso de C++ (~ 100 vídeo-aulas): https://goo.gl/BFbNOL
 Maratona de Programação com STL: http://goo.gl/eyhOzq
 Contato: mcastrosouza@live.com
44

Estruturas de dados com C++ e STL

  • 1.
    CURSO DE MARATONADE PROGRAMAÇÃO ICT-Unifesp
  • 2.
     Iremos utilizara STL (biblioteca padrão do C++).  Por que?  STL possui várias estruturas implementadas.  Estudos dizem que você irá escrever menos e poderá obter mais !!  Lembre-se:  A STL ajuda, mas não faz milagres!  Estude os mais diversos algoritmos e técnicas de programação.  Use a STL de forma adequada.  Exemplo: uso vetor (vector) ou lista (list) ?  Resolva (muitos=2)^10 problemas. 2
  • 3.
     O objetivoé maratona de programação.  A maratona é democrática, você pode programar até em Java!  Com a palavra ViniGodoy: 3
  • 4.
     Relax, nãoé preciso dominar a linguagem...  Só precisamos saber um pouquinho...  Você pode misturar C e C++.  Ou pode fazer o código totalmente em C e salvar como .cpp :D  Seu foco maior será nos algoritmos e técnicas para resolver os problemas.  C++ e STL te ajudarão a não ter maiores dores de cabeça! 4
  • 5.
  • 6.
     No Cfazíamos: 6
  • 7.
     No C++utilizando STL:  Não esquecer de incluir: #include <vector> 7
  • 8.
     Ok, escrevemosmenos quando fizemos em C, mas você pode passar para o construtor a quantidade de elementos, será inicializado tudo com 0 e aí você só atribui os valores: 8
  • 9.
     O vectorpossui várias operações.  Vimos a função push_back que insere elementos, mas existem outras...  A função erase apaga elementos:  A função clear que remove todos os elementos: v.clear(); 9
  • 10.
     Pergunta: removeo último elemento ? 10
  • 11.
     Pergunta: removeo último elemento ? 11
  • 12.
     Corrigindo...  Obegin() aponta para o primeiro elemento e o end() não aponta para o último elemento, entendeu? Nem eu! 12
  • 13.
  • 14.
     String doC++ também é legal, você pode passar o conteúdo no construtor: 14
  • 15.
     Mas eutenho uma string do C! Ok ... 15
  • 16.
     Mas eutenho uma string do C, quero passar para C++ e quero imprimir a string do C++ com o saudoso printf! Ok ...... 16
  • 17.
     As funçõesmantêm um certo padrão.  Lembra das funções size() e erase() ?  Elas existem para string! O que é impresso na última linha? 17
  • 18.
     Copiando umastring (saudades da strcpy ??) : 18
  • 19.
     Desafio: oque imprimirá cada um dos códigos? 19
  • 20.
  • 21.
     Acessando oselementos: 21
  • 22.
     Lembra dapilha que você teve que implementar em estrutura de dados?  Sem sofrimento, basta você incluir: #include <stack> 22
  • 23.
     A remoçãoé feita com a função pop(): 23
  • 24.
     Verificar sea pilha está vazia: 24
  • 25.
     Lembra dafila do banco? Inclua: #include <queue> 25
  • 26.
     Utilize afunção back() para saber quem é o último da fila: 26
  • 27.
     Quer associarelementos por chave/valor? #include <map> 27
  • 28.
     Verificando seuma chave existe: 28
  • 29.
     Não temosa chave “blabla”, o que será impresso? 29
  • 30.
     Percorrendo omap...  A impressão ocorre na ordem em que os elementos foram inseridos? 30
  • 31.
     Permite inserirelementos no início e no final:  #include <queue> ou #include <deque> 31
  • 32.
  • 33.
     E sefosse uma fila, funcionaria o código abaixo? 33
  • 34.
     E sefosse uma fila, funcionaria o código abaixo? 34
  • 35.
     O setnão permite elementos repetidos. Basta incluir: #include <set>  Os elementos são mantidos em ordem crescente. 35
  • 36.
     Mas eupreciso de um set com elementos repetidos em ordem crescente.  Seus problemas acabaram: multiset 36
  • 37.
     Ouvi dizerque em C++ você programa com classe...  Struct é quase igual a uma classe... O código abaixo compila? 37
  • 38.
     Agora simcódigo abaixo compila!  Os membros por default de uma classe são privados, então colocamos o public: 38
  • 39.
     O códigoabaixo compila!  Os membros por default de uma struct são públicos. 39
  • 40.
     Alguns algoritmosestão implementados para você utilizar.  #include <algorithm>  Ordenar os elementos em ordem crescente: sort() 40
  • 41.
     Imprimir todasas permutações: next_permutation() 41
  • 42.
     Busca binária:binary_search() 42
  • 43.
  • 44.
     Tem quasetudo aqui: http://www.cplusplus.com/reference  Curso de C++ (~ 100 vídeo-aulas): https://goo.gl/BFbNOL  Maratona de Programação com STL: http://goo.gl/eyhOzq  Contato: mcastrosouza@live.com 44