Baixe o app para aproveitar ainda mais
Prévia do material em texto
Standard Template Library e Fluxos de Entrada e Saída Profa. Dra. Ieda Hidalgo E-mail: iedahidalgo@ft.unicamp.br Definição Standard Template Library - STL Biblioteca Padrão de Modelos (Gabaritos) ------------------------------------------------------------------------- STL é uma biblioteca de estruturas de dados e funções, integrada à biblioteca padrão de C++, que utiliza o conceito de programação genérica (template). Ela permite aos programadores implementar facilmente estruturas de dados aumentando significativamente sua produtividade. Em outras palavras... STL faz uso de templates para implementação de estrutura de dados e funções que manipulam tipos genéricos de forma eficiente. Estrutura de dados: vetores, listas, pilhas, etc. Funções: busca, ordenação, etc. Observações • Em STL, todas as classes, objetos e funções são definidos com o namespace std. • No STL também foi adicionado um tipo “String”, que facilita as operações de manipulação de caracteres quando comparado a biblioteca string.h da linguagem C. Componentes Básicos da STL � Containers � Iteradores � Algoritmos Containers Containers é o nome dado às estruturas de dados em STL. Eles armazenam valores de um dado tipo (int, float, etc). Exemplos: Sequenciais: vetor, deque e lista. Associativos: set, multiset, map, e multimap. Adaptativos: pilha e fila. Leka Highlight Leka Highlight Leka Highlight Descrição dos Containers Container Descrição Vetor Inserções e remoções no fim da estrutura. Deque Inserções e remoções no início e no fim da estrutura. Lista Inserções e remoções em qualquer lugar da estrutura. Set Conjunto, duplicatas não permitidas. Multiset Conjunto, duplicatas permitidas. Map Mapeamento um para um, duplicatas não permitidas. Multimap Mapeamento um para muitos, duplicatas não permitidas. Pilha Último elemento a entrar na estrutura é o primeiro a sair. Fila Primeiro elemento a entrar na estrutura é o primeiro a sair. Exemplo: Cointainer “Vector” # include <vector> using std::vector; int main() { vector<int> v; v.push_back(4); v.push_back(2); v.push_back(3); v[0] = 1; for (int i = 0; i < v.size(); i++) cout << v[i] << endl; return 0; } Leka Highlight Leka Highlight Exemplo: Cointainer “Map” # include <map> # include <string> # include <iostream> using namespace std; int main() { map<string, int> digitos; string s; digitos[“zero”] = 0; digitos[“um”] = 1; digitos[“dois”] = 2; digitos[“três”] = 3; digitos[“quatro”] = 4; digitos[“cinco”] = 5; digitos[“seis”] = 6; digitos[“sete”] = 7; digitos[“oito”] = 8; digitos[“nove”] = 9; while (cin >> s) cout << digitos[s] << endl; return 0; } Iteradores Em STL, iteradores são os ponteiros inteligentes que permitem uma maneira unificada de percorre os dados dos containers. Eles percorrem os elementos dos containers da mesma forma que um índice percorre os elementos de um array. Somente conteineres sequenciais e adaptativos podem ser percorridos com iteradores. Leka Highlight Leka Highlight Leka Highlight Tipos de Iteradores Categoria Descrição Entrada Usado para ler um elemento de um container. Pode mover-se somente para a frente, um elemento a cada vez. Saída Usado para escrever um elemento em um container. Pode mover-se somente para a frente, um elemento a cada vez. Avanço Combina os recursos dos iteradores de entrada e de saída e retém sua posição no container (como informação de estado). Bidirecional Combina os recursos do iterador avanço com a habilidade de mover-se para trás. Acesso aleatório Combina os recursos do iterador bidirecional com a habilidade de acessar diretamente qualquer elemento do container, isto é, saltar para frente ou para trás um número arbitrário de elementos. # include <map> # include <string> # include <iostream> using namespace std; int main() { map<string, int> digitos; map<string, int>::iterator iter; string s; digitos[“zero”] = 0; digitos[“um”] = 1; digitos[“dois”] = 2; digitos[“três”] = 3; digitos[“quatro”] = 4; digitos[“cinco”] = 5; for (iter = digitos.begin(); iter != digitos.end(); iter++) cout << iter->first << “ = ” << iter->second << endl; return 0; } Observções • Este iterator só pode ser usado sobre objectos do tipo map<string, int>. Não pode ser usado para iterar sobre, por exemplo, um vector<int> nem sobre um map<int, int>. • O método digitos.begin() retorna um iterator para o início do mapa. • O método digitos.end() retorna um iterator para um elemento após o último do mapa. Exemplo: Para verificar se uma dada string existe num mapa. Utilidades para “digitos.end()” • Identificar o fim da estrutura. • Procurar um elemento na estrutura. if (digitos.find(“onze”) == digitos.end()) // não existe! else // existe! Leka Highlight Leka Highlight Leka Highlight Algoritmos Os algoritmos correspondem às ações a serem executadas sobre os containers. Eles não dependem dos detalhes de implementação dos containers sobre os quais eles operam. Exemplos: find, sort, bynary-search (algoritmos básicos de pesquisa e classificação). Leka Highlight Leka Highlight Exemplo: Algoritmo “Sort” # include <algorithm> # include <vector> # include <iostream> using namespace std; int main() { int n; vector <int> v; cout << “0 para parar:\n”; while (cin >> n) { if (n==0) break; v.push_back(n); } sort(v.begin(), v.end()); for (vector<int>::interator iter = v.begin(); iter != v.end(); iter++) cout << *iter << endl; return 0; } Observações • Para ordenar os elementos de um vector podemos usar o algoritmo sort. • O sort precisa de 2 argumentos, um iterator para o início da sequência a ordenar e outro para o fim. • Se ao invés de um vector tivéssemos usado uma lista, o sort seria chamado da mesma forma. Críticas para STL 1. As mensagens de erro relacionadas à STL tendem a ser longas e difíceis de serem interpretadas, dificultando o desenvolvimento. 2. Quanto maior o número de tipos de dados diferentes utilizados em templates: • Mais código é gerado pelo compilador • Mais memória é utilizada. Fluxo de Dados Entrada e Saída - arquivo texto banco de dados Arquivo Texto 1 #include <fstream.h> Gravação do Arquivo Texto 1 #include <fstream.h> Leitura do Arquivo Texto 1 Leitura do Arquivo Texto 1 (continuação) Arquivo Texto 2 #include <fstream.h> Gravação do Arquivo Texto 2 #include <fstream.h> Leitura do Arquivo Texto 2 Leitura do Arquivo Texto 2 (continuação) Classe TSearchCodTxt Inserção de Registro em Tabela Edição de Registro em Tabela
Compartilhar