Se viene passato, viene passato per valore o per riferimento?Come passare il vettore 2-D a una funzione in C++?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
Se viene passato, viene passato per valore o per riferimento?Come passare il vettore 2-D a una funzione in C++?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
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.
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);
Non dimenticare uno spazio nel modello annidato, vale a dire 'vettore>', altrimenti alcuni compilatori si lamenta perché i turni validi destra. –
casablanca
Userò semplicemente il tuo commento come una nota in tal senso. Ma ci sono compilatori rilevanti in cui questo è ancora un problema? –