2002/2003 programação orientada para objectos 1 aula 12 biblioteca padrão do c++ o que é?...
TRANSCRIPT
![Page 1: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/1.jpg)
2002/2003 Programação Orientada para
Objectos1
Aula 12
Biblioteca padrão do C++ O que é? Composição Alguns componentes:
Contentores Iteradores Algoritmos Functores
![Page 2: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/2.jpg)
2002/2003 Programação Orientada para
Objectos2
C++ Padrão
Normalização de 1989 a 1997 Publicação em 1998 Nova versão em 2004? Norma de 750 páginas, publicada pelo ISO
(Organização Internacional de Normalização) “Information Technology – Programming Languages – C+
+” (ISO/IEC 14882-1998)
![Page 3: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/3.jpg)
2002/2003 Programação Orientada para
Objectos3
Biblioteca padrão do C++
Parte da norma é uma biblioteca: E/S Cadeias de caracteres Contentores Algoritmos Cálculo numérico Internacionalização
![Page 4: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/4.jpg)
2002/2003 Programação Orientada para
Objectos4
STL (Standard Template Library)
Cerne da biblioteca padrão Fornece ferramentas para manipular
colecções de dados Separação clara entre dados e operações Componentes genéricos
Novo nível de abstracção
![Page 5: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/5.jpg)
2002/2003 Programação Orientada para
Objectos5
Componentes da STL
Contentores (dados) Gestão de colecções de itens de um dado tipo
Iteradores (“cola” entre contentores e algoritmos) Percorrem contentores Contentores vistos como sequências Interface comum, independente do tipo de contentor
Algoritmos (operações comuns sobre sequências) Usados para processar os itens dos contentores
Functores Necessidades especiais Suplementos, restrições ou configurações para algoritmos e
operações
![Page 6: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/6.jpg)
2002/2003 Programação Orientada para
Objectos6
Contentores
Sequenciais Posição de itens não depende do seu valor! (ordem
extrínseca) Exemplos: std::vector, std::deque e std::list
Associativos Posição de itens depende do seu valor e ordem exacta
depende de relação de ordem (ordem intrínseca) Relação de ordem por omissão: operador < Exemplos: std::set, std::multiset, std::map e std::multimap
![Page 7: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/7.jpg)
2002/2003 Programação Orientada para
Objectos7
vector
Implementação típica: matrizes dinâmicas Acesso aleatório (directo e eficiente usando indexação) Adição e remoção eficientes de itens na traseira #include <vector> Operações comuns
Construir: vector<int>() Indexar: operator[]() Saber se está vazio: empty() Saber dimensão: size() Acrescentar atrás: push_back() Remover último item: pop_back()
![Page 8: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/8.jpg)
2002/2003 Programação Orientada para
Objectos8
deque (Double-Ended QUEue)
Implementação típica: matrizes dinâmicas Acesso aleatório Adição e remoção eficientes de itens na traseira e na frente #include <deque> Operações comuns:
Construir: deque<double>() Indexar: operator[]() Saber se está vazia: empty() Saber comprimento: size() Acrescentar à frente/atrás: push_front() e push_back() Remover primeiro/último item: pop_front() e pop_back()
![Page 9: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/9.jpg)
2002/2003 Programação Orientada para
Objectos9
list (lista)
Implementação típica: cadeias duplamente ligadas Acesso sequencial Inserção e remoção eficiente de itens em qualquer posição #include <list> Algumas operações:
Construir: list<float>() Saber se está vazia: empty() Saber comprimento: size() Saber primeiro item: front() Saber último item: back() …
![Page 10: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/10.jpg)
2002/2003 Programação Orientada para
Objectos10
set (conjunto) e multiset (colecção)
Ordem intrínseca (posição dos itens depende do seu valor) Implementação típica: árvores binárias Conjuntos: sem repetições de itens Colecções: com repetições Não se podem modificar os itens #include <set> ou #include <multiset> Operações comuns:
Contruir: set<int>() ou multiset<int>() Saber se está vazio: empty() Saber cardinalidade: size() Inserir item: insert() Remover item: erase() Saber número de itens com valor: count()
![Page 11: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/11.jpg)
2002/2003 Programação Orientada para
Objectos11
map (mapa) e multimap (multimapa)
Itens são pares (chave, valor) – e.g., pair<int, string> Ordem intrínseca (posição dos pares depende da sua chave) Mapas: sem repetição de chaves Multimapas: com repetição #include <map> ou #include <multimap> Operações comuns:
Construir: map<int, string>() ou multimap<int, string>() Saber se está vazio: empty() Saber número de pares: size() Indexar usando chave: operator[]() Inserir par: insert() Remover pares: erase() Saber número de pares com chave: count()
![Page 12: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/12.jpg)
2002/2003 Programação Orientada para
Objectos12
Contentores especiais
Implementação típica: contentores anteriores Sem iteradores
stack (pilhas) Contentor que gere os seus elementos de acordo com a política LIFO
queue (filas) Contentor que gere os seus elementos de acordo com a política FIFO
priority_queue (filas prioritárias) Frente da fila é item mais prioritário Por omissão, prioridade comparada usando operador <
![Page 13: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/13.jpg)
2002/2003 Programação Orientada para
Objectos13
Que contentor usar?
Use vector (contentor mais simples) Insere ou remove itens à frente e atrás? Use deque Insere ou remove itens a meio? Use list Procura com frequência itens pelo seu valor? Use set ou multiset
Deseja separar itens em chave e valor? Use map ou multimap
![Page 14: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/14.jpg)
2002/2003 Programação Orientada para
Objectos14
Iteradores
Permitem definir sequências Permitem percorrer contentores Referenciam itens Operadores fundamentais:
Saber conteúdo ou item referenciado: * Avançar: ++ Comparar: == e != Atribuir: =
![Page 15: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/15.jpg)
2002/2003 Programação Orientada para
Objectos15
Iteradores
Operações de obtenção de iteradores (apenas contentores não-especiais): begin() end() …
Há sempre dois tipos de iteradores: contentor::iterator contentor::const_iterator
begin() end()
![Page 16: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/16.jpg)
2002/2003 Programação Orientada para
Objectos16
Tipos de iteradores
Bidireccionais Avançam e recuam (++ e --) Contentores: list, set, multiset, map e multimap
De acesso aleatório São também bidireccionais Permitem acesso aleatório aos itens da sequência Permitem aritmética mais completa de iteradores: saltos, distâncias, ... Contentores: vector e deque
vector<int>::const_iterator i = v.begin();i += 2;cout << i[3] << endl;cout << *i << endl;
![Page 17: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/17.jpg)
2002/2003 Programação Orientada para
Objectos17
Iteradores especiais
De inserção Na traseira de um contentor Na frente de um contentor Em local dado
Iteradores associados a um canal Inserem ou extraem itens de canais automaticamente
Iteradores reversos Avançar recua, recuar avança
![Page 18: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/18.jpg)
2002/2003 Programação Orientada para
Objectos18
Iteradores especiais (exemplo)
list<int> l;for(int i = 0; i != 10; ++I) l.push_back(i);
vector<int> v;copy(l.begin(), l.end(), back_inserter(v));
set<int> c;copy(l.begin(), l.end(), inserter(c, c.begin()));
copy(l.begin(), l.end(), ostream_iterator<int>(cout, “ “));cout << endl;
copy(l.rbegin(), l.rend(), ostream_iterator<int>(cout, “\n“));
![Page 19: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/19.jpg)
2002/2003 Programação Orientada para
Objectos19
Algoritmos
#include <algorithm> #include <numeric> Rotinas genéricas sobre sequências Sequências definidas por iteradores Relação com contentores através de iteradores: não são
operações membro! Sufixos dos nomes dos algoritmos:
_if – têm predicado como argumento, usando-o para identificar itens _copy – copiam para um destino ao actuar, não alterando o original
![Page 20: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/20.jpg)
2002/2003 Programação Orientada para
Objectos20
Tipos de algoritmos
Não modificadores Modificadores De remoção De mutação De ordenação Para sequências de itens intrinsecamente
ordenadas Numéricos
![Page 21: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/21.jpg)
2002/2003 Programação Orientada para
Objectos21
sort() e reverse()
int main(){ vector<int> v;
v.push_back(13); v.push_back(7); v.push_back(10);
sort(v.begin(), v.end()); copy(v.begin(), v.end(), ostream_iterator<int>(cout, “\n“));
reverse(v.begin(), v.end()); copy(v.begin(), v.end(), ostream_iterator<int>(cout, “\n“));}
![Page 22: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/22.jpg)
2002/2003 Programação Orientada para
Objectos22
replace() e unique_copy()
int main(){ list<int> l;
l.push_back(7); l.push_back(7); l.push_back(9); l.push_back(10);
replace(l.begin(), l.end(), 7, 44); copy(l.begin(), l.end(), ostream_iterator<int>(cout, “\n“));
unique_copy(l.begin(), l.end(), ostream_iterator<int>(cout, “\n“));}
![Page 23: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/23.jpg)
2002/2003 Programação Orientada para
Objectos23
Classes functoras
Classes cujas instâncias se comportam como rotinas Instâncias (functores) podem ser usadas como rotinas Têm de ter como operação membro operator() Definição:
class X { public: tipo_de_devolução operator() (parâmetros) const; …};…X fo;…fo(argumentos); // ou fo.operator()(argumentos);// outipo_de_devolução resultado = fo(argumentos);
![Page 24: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/24.jpg)
2002/2003 Programação Orientada para
Objectos24
Functores
Tipos Predicados Aritméticos
Vantagens face a ponteiros para rotinas Podem ter atributos: “rotinas” com estado! Maior possibilidade de utilizar código em-linha
![Page 25: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/25.jpg)
2002/2003 Programação Orientada para
Objectos25
Functores pré-definidos
negate<T>() plus<T>() minus<T>() multiplies<T>() divides<T>() modulus<T>() equal_to<T>() not_equal_to<T>()
less<T>() greater<T>() less_equal<T>() greater_equal<T>() logical_not<T>() logical_and<T>() logical_or<T>()
![Page 26: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/26.jpg)
2002/2003 Programação Orientada para
Objectos26
Adaptadores de functores
Combinam functores com functores, functores com valores e functores com rotinas
Adaptadores de functores pré-definidos: bind1st() bind2nd() not1() not2()
![Page 27: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/27.jpg)
2002/2003 Programação Orientada para
Objectos27
Functores: Aumentando a STL
template <typename T>class Mostra : public unary_function<T, void> { public: Mostra(ostream& out); void operator()(T const& t) const;
private: ostream& out;};
template <typename T>Mostra<T>::Mostra(ostream& out) : out(out) {}
template <typename T>void Mostra<T>::operator()(T const& t) const { out << t << endl;}
![Page 28: 2002/2003 Programação Orientada para Objectos 1 Aula 12 Biblioteca padrão do C++ O que é? Composição Alguns componentes: Contentores Iteradores Algoritmos](https://reader035.vdocuments.mx/reader035/viewer/2022062512/552fc11a497959413d8c96bc/html5/thumbnails/28.jpg)
2002/2003 Programação Orientada para
Objectos28
Como usar o novo functor
int main(){ vector<int> v;
v.push_back(2); v.push_back(5); v.push_back(9);
// Algoritmo for_each for_each(v.begin(), v.end(), Mostra<int>(cout));}