Si se aprueba, ¿se pasa por valor o por referencia?¿Cómo pasar el vector 2-D a una función en C++?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
Si se aprueba, ¿se pasa por valor o por referencia?¿Cómo pasar el vector 2-D a una función en C++?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
Debido a que su declaración de la función:
void printMatrix(vector< vector<int> > *matrix)
especifica un puntero, se pasa básicamente por referencia. Sin embargo, en C++, es mejor evitar puntos y pasar una referencia directa:
void printMatrix(vector< vector<int> > &matrix)
y
printMatrix(matrix1); // Function call
Esto parece ser una llamada a la función normal, pero se pasa por referencia como se indica en la función declaración. Esto le ahorra referencias de punteros innecesarias.
Bueno, antes que nada, lo estás creando mal.
vector<vector<int>> matrix1(3, vector<int>(3,0));
Puede pasar por valor o por referencia, o por puntero (no recomendado). Si está pasando a una función que no cambia el contenido, puede pasar por valor o por referencia. Preferiría la referencia constante, algunas personas piensan que la forma "correcta" es pasar de valor.
void printMatrix(const vector<vector<int>> & matrix);
// or
void printMatrix(vector<vector<int>> matrix);
// to call
printMatrix(matrix1);
No se olvide de un espacio en la plantilla anidada, es decir, 'vector>', de lo contrario algunos compiladores se quejan de desplazamientos a la derecha no válidos. –
casablanca
Voy a utilizar su comentario como una nota a tal efecto. ¿Pero hay compiladores relevantes donde esto todavía es un problema? –