2010-10-30 16 views

Respuesta

14

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.

1

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); 
+1

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

+0

Voy a utilizar su comentario como una nota a tal efecto. ¿Pero hay compiladores relevantes donde esto todavía es un problema? –

Cuestiones relacionadas