2010-10-30 8 views

risposta

14

Dal momento che la dichiarazione di funzione:

void printMatrix(vector< vector<int> > *matrix) 

specifica un puntatore, è essenzialmente passato per riferimento. Tuttavia, in C++, è meglio evitare di puntatori e passare un riferimento direttamente:

void printMatrix(vector< vector<int> > &matrix) 

e

printMatrix(matrix1); // Function call 

Questo appare come un normale chiamata di funzione, ma è passato per riferimento, come indicato nella funzione dichiarazione. Ciò ti evita inutili dereferenze del puntatore.

1

Beh, prima di tutto, lo stai creando male.

vector<vector<int>> matrix1(3, vector<int>(3,0)); 

È possibile passare per valore o per riferimento o tramite puntatore (non consigliato). Se passi a una funzione che non modifica il contenuto, puoi passare per valore o per riferimento const. Preferirei il riferimento const, alcune persone pensano che il modo "corretto" sia quello di passare per valore.

void printMatrix(const vector<vector<int>> & matrix); 

// or 
void printMatrix(vector<vector<int>> matrix); 

// to call 
printMatrix(matrix1); 
+1

Non dimenticare uno spazio nel modello annidato, vale a dire 'vettore >', altrimenti alcuni compilatori si lamenta perché i turni validi destra. – casablanca

+0

Userò semplicemente il tuo commento come una nota in tal senso. Ma ci sono compilatori rilevanti in cui questo è ancora un problema? –