2010-10-30 7 views

Répondre

14

Depuis votre déclaration de fonction:

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

spécifie un pointeur, il est essentiellement passé par référence. Cependant, en C++, il est préférable d'éviter les pointeurs et passer une référence directement:

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

et

printMatrix(matrix1); // Function call 

Cela ressemble à un appel de fonction normale, mais il est passé par référence comme indiqué dans la fonction déclaration. Cela vous évite des déréférences inutiles.

1

Eh bien, tout d'abord, vous créez le problème.

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

Vous pouvez passer par valeur, par référence ou par pointeur (non recommandé). Si vous passez à une fonction qui ne modifie pas le contenu, vous pouvez passer par valeur, ou par référence const. Je préférerais la référence const, certaines personnes pensent que le "bon" moyen est de passer par la valeur.

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

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

// to call 
printMatrix(matrix1); 
+1

Ne pas oublier un espace dans le modèle imbriqué, à savoir 'vecteur >', sinon certains compilateurs se plaindront décalages à droite invalides. – casablanca

+0

Je vais juste utiliser votre commentaire comme une note à cet effet. Mais y a-t-il des compilateurs pertinents là où c'est toujours un problème? –

Questions connexes