如何在C++中将二维向量传递给函数?

15

如果它被传递了,那么它是按值传递还是按引用传递?

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

...

vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
3个回答

32

自从你的函数声明:

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

指定一个指针,本质上是按引用传递。然而,在C++中,最好避免使用指针,直接传递引用更好:

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

printMatrix(matrix1); // Function call

看起来像是普通的函数调用,但根据函数声明,它是通过引用传递的。这样可以避免不必要的指针解引用。


3
为什么不只传递二维向量呢?
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);

1
首先,你的创建方式是错误的。
vector<vector<int>> matrix1(3, vector<int>(3,0));

你可以按值传递、按引用传递或按指针传递(不建议)。如果你要传递给一个不修改内容的函数,你可以通过值传递或通过const引用传递。我更喜欢const引用,有些人认为按值传递是“正确”的方式。

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

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

// to call
printMatrix(matrix1);

3
不要忘记在嵌套模板中加入空格,即 vector<vector<int> >,否则某些编译器会报告不合法的右移错误。 - casablanca
我会把你的评论当作相关说明的注释。但是还有哪些编译器存在这个问题呢? - Benjamin Lindley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接