PDA

View Full Version : [C++] Forward iterator in array bidimensionali


alessandrom
03-02-2012, 22:50
Ciao a tutti,
sto facendo altre prove con c++ e ho implementato una classe per rappresentare una matrice. in questa classe ho messo due strutture dati che si comportano come una lista di liste:


struct colonna{
int indicecolonna;
colonna *next;
};

struct riga{
int indiceriga;
colonna *colonne;
riga* next;
};


mi piacerebbe realizzare un forward iterator in grado di scorrere la matrice da sinistra verso destra, e dall'alto verso il basso, ma non trovo materiale/spiegazioni adeguati.

Potreste darmi una mano?

PS
Non posso cambiare implementazione, voglio solo sapere se così è possibile realizzare o no un fwd iterator.

__ZERO_UNO__
04-02-2012, 00:55
Per caso, la sparo lì, devi implementare una classe che si chiama SparseMatrix?
lol....

Se googli sparse matrices trovi tonnellate di materiale.

PS
Dai una occhiata al sparse matrices compressed row storage.

alessandrom
04-02-2012, 11:35
Ciao, grazie per il link, ma volevo sapere se era possibile realizzare un iteratore con l'implementazione che già ho a disposizione.

marco.r
04-02-2012, 15:11
Il problema di base e' che l'implementazione che hai scelto e' poco pratica (liste di liste ? meglio un array di array o un unico array) e sbagliata (dove salvi il valore della cella A(i,j)?)
In ogni caso l'iteratore lo puoi fare, sara' una struttura che contiene un riferimento tanto alla riga corrente quanto alla colonna corrente.
Quando lo fai avanzare procedi lungo la colonna corrente, quando arrivi alla fine avanzi di uno sulla riga corrente e riparti

alessandrom
04-02-2012, 17:18
Ciao marco, grazie per la risposta.

Oggi pomeriggio sono riuscito a fare l'iteratore della lista di liste.
Il problema però è dato dal fatto che non posso definire l'operatore ==, perchè per come l'ho implementato io l'iteratore genera "al volo" una struct contenente coordinate e valore.

Ogni volta che io chiamo begin, end o ++, non viene riutilizzata la stessa struct, ma se ne crea una nuova, anche per lo stesso elemento.

E' corretto oltre a confrontare l'indirizzo confrontare anche i contenuti per vedere se le strutture si riferiscono effettivamente allo stesso identico elemento? (Le strutture contengono i dati dell'elemento, non l'elemento stesso com'è memorizzato nella matrice)
La consegna dell'esercizio dice che l'iteratore deve ritornare delle struct che contengono coordinate e dato memorizzato, ma non dice che devono essere usate anche per realizzare la classe matrice in sè.