How to pass 2-D vector to a function in C++?
Well, first of all, you're creating it wrong.
vector<vector<int>> matrix1(3, vector<int>(3,0));
You can pass by value or by reference, or by pointer(not recommended). If you're passing to a function that doesn't change the contents, you can either pass by value, or by const reference. I would prefer const reference, some people think the "correct" way is to pass by value.
void printMatrix(const vector<vector<int>> & matrix);
// or
void printMatrix(vector<vector<int>> matrix);
// to call
printMatrix(matrix1);
Why not passing just the 2d vector?
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);
Since your function declaration:
void printMatrix(vector< vector<int> > *matrix)
specifies a pointer, it is essentially passed by reference. However, in C++, it's better to avoid pointers and pass a reference directly:
void printMatrix(vector< vector<int> > &matrix)
and
printMatrix(matrix1); // Function call
This looks like a normal function call, but it is passed by reference as indicated in the function declaration. This saves you from unnecessary pointer dereferences.