PDA

Visualizza la versione completa : [c++]vector e matrice


giuseppe500
03-03-2009, 10:20
Ciao.
Ho dei dati in un vector del tipo:
vector<vector<float>> matrice;

vorrei trasferirli in una matrice bidimensionale dove la prima colonna è un indice intero e la seconda un array di float e scorrerla con un puntatore anziche' con un iteratore(del vector).
in pratica qualcosa del tipo :matrice[int][float]
Lo faccio perchè ho delle matrici molto grandi e metterli in un vector è molto piu' lento.
E' possibile?
come costruisco la matrice?
grazie

shodan
03-03-2009, 12:34
Se per te è uguale usare la matrice come matrix(row,col) invece che matrix[row][col] puoi prendere spunto da qui:
http://www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.10
(e seguente)
In questo modo risparmi n allocazioni giocando poi sugli indici. (E' spiegato anche il perché)

giuseppe500
03-03-2009, 18:42
grazie , molto interessante , ma volevo qualcosa di "scorribile" utilizzando puntatori perchè appunto deve essere molto veloce (ho piu' di 100000 elementi ).

è possibile creare qualcosa del tipo:
int rows = 100;
int columns = 100;
int[rows]float[columns] variabile = new ...

float *pPunt = variabile[0][0];
scrivere con
*pPunt = 1.001;
*pPunt++;
*pPunt = 2.222;
e leggere con

float *pPunt = variabile[0][0];

float f1=*pPunt++;
float f2=*pPunt++;

ecc....

ho buttato li , ma com è la sintassi giusta?
Grazie.

shodan
03-03-2009, 19:55
Perché float l'indice? :dottò:


matrice[int][float];

Mah, non vedo tutto questo "guadagno" in termini di velocità.
Comunque se vuoi evitare l'overhead dell'operatore() e scorrere tutto tramite un unico puntatore meglio se consideri la matrice come un array di dimensione rows*cols e giocare con gli indici per ricavare l'offset. In caso di allocazione dinamica hai sempre la certezza che gli elementi siano contigui.

Loading