Как передать 2-D вектор функции в C++?
если он передан, передается ли он по значению или по ссылке?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
3 ответов
С момента объявления вашей функции:
void printMatrix(vector< vector<int> > *matrix)
указывает указатель, он по существу передается по ссылке. Однако в C++ лучше избегать указателей и передавать ссылку напрямую:
void printMatrix(vector< vector<int> > &matrix)
и
printMatrix(matrix1); // Function call
Это выглядит как обычный вызов функции, но он передается по ссылке, как указано в объявлении функции. Это избавит вас от ненужных разыменований указателей.
Ну, во-первых, вы создаете неправильно.
vector<vector<int>> matrix1(3, vector<int>(3,0));
можно передавать по значению или по ссылке или по указателю(не рекомендуется). Если вы переходите к функции, которая не изменяет содержимое, вы можете либо передать по значению, либо по ссылке const. Я бы предпочел const reference, некоторые люди думают, что" правильный " способ-пройти по значению.
void printMatrix(const vector<vector<int>> & matrix);
// or
void printMatrix(vector<vector<int>> matrix);
// to call
printMatrix(matrix1);
почему бы не передать только 2d-вектор?
void printMatrix(vector < vector<int> > matrix)
{
cout << "[";
for(int i=0; i<matrix.size(); i++)
{
cout << "[" << matrix[i][0];
for(int j=0; j<matrix[0].size(); j++)
{
cout << ", " << matrix[i][j];
}
cout << "]" << endl;
}
cout << "]" << endl;
}
vector < vector<int> > twoDvector;
vector<int> row(3,2);
for(int i=0; i<5; i++)
{
twoDvector.push_back(row);
}
printMatrix(twoDvector);