[英]How to pass 2-D vector to a function in C++?
如果傳遞,是按值傳遞還是按引用傳遞?
void printMatrix(vector<vector<int>> *matrix);
...
vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
由於您的函數聲明:
void printMatrix(vector< vector<int> > *matrix)
指定一個指針,它本質上是通過引用傳遞的。 但是,在 C++ 中,最好避免使用指針並直接傳遞引用:
void printMatrix(vector< vector<int> > &matrix)
和
printMatrix(matrix1); // Function call
這看起來像一個普通的函數調用,但它是通過引用傳遞的,如函數聲明中所示。 這可以避免不必要的指針取消引用。
為什么不只傳遞二維向量?
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);
嗯,首先,你創建它是錯誤的。
vector<vector<int>> matrix1(3, vector<int>(3,0));
您可以按值或按引用或按指針傳遞(不推薦)。 如果要傳遞給不更改內容的函數,則可以按值傳遞,也可以按常量引用傳遞。 我更喜歡 const 引用,有些人認為“正確”的方法是按值傳遞。
void printMatrix(const vector<vector<int>> & matrix);
// or
void printMatrix(vector<vector<int>> matrix);
// to call
printMatrix(matrix1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.