Creazione lista da una matrice C++

di il
1 risposte

Creazione lista da una matrice C++

Salve a tutti!
Sto avendo problemi con la seguente funzione:

// Classi Matrix e SparseMatrix
#include <vector>

// Matrice densa
struct Matrix {
  std::vector< std::vector<double> > store;
  int nr;
  int nc;
};

// Elemento di matrice sparsa
struct SparseEntry {
  int r;
  int c;
  double val;
  SparseEntry * next;
};

// Matrice sparsa
struct SparseMatrix {
  SparseEntry * store;
  int nr;
  int nc;
  int nnz;
};

// Creazione matrice sparsa a partire da matrice densa
SparseMatrix sparse(const Matrix & m)
// input:
// - Una Matrix m
// output:
// - Un valore di tipo SparseMatrix contenente gli elementi di m in una lista
{
	SparseMatrix res;
	res.store;
	res.nr=m.nr;
	res.nc=m.nc;
	res.nnz=0;
 	for(int riga=0;riga<m.nr;riga++){
		for(int col=0;col<m.nc;col++){
			if(m.store[riga][col]!=0.0) res.nnz++;
			SparseEntry* aux=new SparseEntry;
			aux->r=riga;
			aux->c=col;
			aux->val=m.store[riga][col];
			aux->next=res.store;
			res.store=aux;			
		}
	}
	return res;			
}

Al momento dell'output non mi visualizza correttamente il risultato, sollevando semplicemente un'eccezione...temo di fare casino con i puntatori!
Grazie mille a tutti per la disponibilità

1 Risposte

  • Re: Creazione lista da una matrice C++

    Al momento dell'output non mi visualizza correttamente il risultato
    Dal momento che parli di output immagino tu abbia implementato anche del codice per visualizzare una SparseMatrix, perchè quindi non hai postato direttamente il codice completo in modo da poterlo compilare agevolandoci nella ricerca del problema?!

    Qualche considerazione:
    - i dati membro nr e nc della struct Matrix sono superflui (sei d'accordo?), quindi se proprio vuoi utilizzare l'identificatore Matrix per un vector<vector<double>> basta usare un typedef;
    - anche il dato membro nnz della struct SparseMatrix è superfluo. In una lista semplicemente concatenata c'è un altro modo per conoscere il numero di elementi, sai qual è?
    - sei cosciente del fatto che stai aggiungendo elementi in testa alla lista e che quindi dalla seguente matrice:
    0 4 7 0 0 1
    0 0 0 0 2 0
    otterrai la lista
    2 1 7 4
    ??
    - relativamente al codice, cosa rappresenta la seguente riga?
    res.store;
    - non è che ci vuole qualche parentesi graffa dopo l'if?
Devi accedere o registrarti per scrivere nel forum
1 risposte