1 aula 2 listas e iteradores. 2003/2004 programação orientada para objectos 2 o que é uma lista?...

31
1 Aula 2 Listas e iteradores

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

1

Aula 2

Listas e iteradores

Page 2: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos2

O que é uma lista?

Exemplo:

Estudar POO Comprar prenda para o dia do pai Fazer trabalho de SO Comprar bilhete para o Rock in Rio

Page 3: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos3

Uma lista é…

Sequência de itens Ordem é relevante Ordem determinada por entidade exterior à

lista

Page 4: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos4

Operações com listas

Construir Pôr item na frente Pôr item na traseira Tirar item da frente Tirar item de trás Saber item da frente Saber item de trás

Saber comprimento Saber se está vazia Saber se está cheia

(caso exista limite) Esvaziar

Page 5: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos5

Iterador

Ferramenta para percorrer e referenciar itens em listas

Estudar POO Comprar prenda para o dia do pai Fazer trabalho de AC II Comprar bilhete para o Rock in Rio

Page 6: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos6

Operações com iteradores

Construir Saber item referenciado Passar ao próximo item Recuar para o item anterior Comparar iteradores (igualdade e diferença)

Page 7: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos7

Operações: listas e iteradores

Obter iterador primeiro Obter iterador último Inserir item antes do item referenciado pelo

iterador Remover item referenciado pelo iterador

Iterador que referencia o primeiro item da lista.

Page 8: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos8

Itens fictícios

Item inicial Item aquém da frente da lista Referenciado pelo iterador início

Item final Item além da traseira da lista Referenciado pelo iterador fim

Page 9: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos9

Exemplo

( ! 1 3 4 6 ! )

Item fictício inicial.

Item fictício final.

Itens regulares.

Page 10: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos10

Operações: listas e iteradores (actualização)

Obter iterador primeiro Obter iterador último Inserir item antes do item referenciado pelo

iterador Remover item referenciado pelo iterador Obter iterador início Obter iterador fim

Page 11: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos11

Interface das listas

class ListaDeInt { public: typedef int Item;

class Iterador;

ListaDeInt();

Item const& frente() const; Item const& trás() const;

int comprimento() const;

bool estáVazia() const; bool estáCheia() const;

void põeNaFrente(Item const& item);void põeAtrás(Item const& item);void tiraDaFrente();void tiraDeTrás();

void insereAntes(Iterador& iterador, Item const& item);void remove(Iterador& iterador);

void esvazia();

Iterador primeiro();Iterador último();Iterador início();Iterador fim();

Page 12: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos12

Classes dentro de classes

Classes embutidas Definidas dentro de uma classe envolvente Membro da classe envolvente Evitam repetições de nomes Relação íntima com classe envolvente

Page 13: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos13

Interface dos iteradores

class ListaDeInt::Iterador { public: explicit Iterador(ListaDeInt& lista_associada);

Item& item() const;

bool operator==(Iterador const& outro_iterador) const; bool operator!=(Iterador const& outro_iterador) const;

Iterador& operator++(); Iterador& operator--(); Iterador operator++(int); Iterador operator--(int);

Page 14: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos14

Mostrar itens no ecrã

ListaDeInt lista;

// Inserção de itens…

for(ListaDeInt::Iterador i = lista.primeiro(); i != lista.fim(); ++i) cout << i.item() << endl;

Page 15: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos15

Inserir por ordem

ListaDeInt lista;

// Inserção de itens…

int n;cin >> n;

ListaDeInt::Iterador i = lista.primeiro();while(i != lista.fim() and i.item() < d) ++i;

lista.insere(i, d);

Page 16: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos16

Implementação das listas

class ListaDeInt { …

private: static int const número_máximo_de_itens = 100;

Item itens[número_máximo_de_itens]; int número_de_itens;

bool cumpreInvariante() const;

friend class Iterador;};

return 0 <= número_de_itens and número_de_itens <= número_máximo_de_itens;

Page 17: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos17

Implementação dos iteradores

class ListaDeInt::Iterador {

private: ListaDeInt& lista_associada; int índice_do_item_referenciado;

bool cumpreInvariante() const;

friend class ListaDeInt;};

return -1 <= índice_do_item_referenciado;

Page 18: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos18

ListaDeInt: métodos (I)

inlineListaDeInt::ListaDeInt() : número_de_itens(0){ assert(cumpreInvariante());}

inline intListaDeInt::comprimento() const{ assert(cumpreInvariante());

return número_de_itens;}

inline boolListaDeInt::estáVazia() const{ assert(cumpreInvariante());

return comprimento() == 0;}

Page 19: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos19

ListaDeInt: métodos (II)

void ListaDeInt::põeNaFrente(Item const& item){ assert(cumpreInvariante()); assert(not estáCheia());

for(int i = comprimento(); i != 0; --i) itens[i] = itens[i – 1];

itens[0] = item;

++número_de_itens;

assert(cumpreInvariante());}

Page 20: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos20

ListaDeInt: métodos (III)

void ListaDeInt::tiraDeTrás(){ assert(cumpreInvariante());

assert(not estáVazia());

--número_de_itens;

assert(cumpreInvariante());}

Page 21: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos21

ListaDeInt: métodos (IV)

void ListaDeInt::insereAntes(Iterador& iterador, Item const& item){ assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início());

for(int i = comprimento(); i != iterador.índice_do_item_referenciado; --i) itens[i] = itens[i – 1];

itens[iterador.índice_do_item_referenciado] = item;

(continua…)

Page 22: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos22

ListaDeInt: métodos (V)

(continuação)

++iterador.índice_do_item_referenciado;

assert(iterador.cumpreInvariante());

++número_de_itens;

assert(cumpreInvariante());}

Page 23: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos23

ListaDeInt: métodos (VI)

inline ListaDeInt::IteradorListaDeInt::primeiro(){ assert(cumpreInvariante());

Iterador iterador(*this);

assert(cumpreInvariante());

return iterador;}

Ou simplesmente:

inline ListaDeInt::IteradorListaDeInt::primeiro(){ assert(cumpreInvariante());

return Iterador(*this);}

Page 24: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos24

ListaDeInt: métodos (VI)

inline ListaDeInt::Iterador ListaDeInt::último(){ assert(cumpreInvariante());

Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento() – 1;

assert(iterador.cumpreInvariante()); assert(cumpreInvariante());

return iterador;}

Page 25: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos25

ListaDeInt: métodos (VII)

inline ListaDeInt::Iterador ListaDeInt::início(){ assert(cumpreInvariante());

Iterador iterador(*this); iterador.índice_do_item_referenciado = –1;

assert(iterador.cumpreInvariante()); assert(cumpreInvariante());

return iterador;}

Page 26: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos26

ListaDeInt: métodos (VIII)

inline ListaDeInt::Iterador ListaDeInt::fim(){ assert(cumpreInvariante());

Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento();

assert(iterador.cumpreInvariante()); assert(cumpreInvariante());

return iterador;}

Page 27: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos27

ListaDeInt::Iterador:métodos (I)

inline ListaDeInt::Iterador::Iterador(ListaDeInt& lista) : lista_associada(lista), índice_do_item_referenciado(0){ assert(cumpreInvariante());}

inline ListaDeInt::Iterador& ListaDeInt::Iterador::operator--(){ assert(cumpreInvariante()); assert(*this != lista_associada.início());

--índice_do_item_referenciado;

assert(cumpreInvariante());

return *this;}

Page 28: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos28

ListaDeInt::Iterador:métodos (II)

inlinebool ListaDeInt::Iterador::operator==(Iterador const& outro) const{ assert(cumpreInvariante() and outro.cumpreInvariante());

// assert(iteradores associados à mesma lista…);

return índice_do_item_referenciado == outro.índice_do_item_referenciado;}

Page 29: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos29

ListaDeInt::Iterador:métodos (III)

inlinebool ListaDeInt::Iterador::operator!=(Iterador const& outro) const{ assert(cumpreInvariante() and outro.cumpreInvariante());

// assert(iteradores associados à mesma lista…);

return índice_do_item_referenciado != outro.índice_do_item_referenciado;}

Page 30: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos30

ListaDeInt::Iterador:métodos (IV)

ListaDeInt::Item& ListaDeInt::Iterador::item(){ assert(cumpreInvariante());

assert(*this != lista_associada.início() and *this != lista_associada.fim());

return lista_associada.itens[índice_do_item_referenciado];}

Page 31: 1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai

2003/2004 Programação Orientada para

Objectos31

Aula 2

Noção de lista e de iterador Listas como sequências de itens com ordem

relevante Iteradores como ferramentas para percorrer e

referenciar itens em listas Operações com listas e iteradores Implementação parcial Classes embutidas