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

问题描述 投票:0回答:4

如果传递的话,是按值传递还是按引用传递?

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

...

vector<vector<int>> matrix(3, vector<int>(3,0));
printMatrix(&matrix1);
c++ vector 2d
4个回答
33
投票

自从你的函数声明以来:

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

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

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

printMatrix(matrix1); // Function call

这看起来像一个普通的函数调用,但如函数声明中所示,它是通过引用传递的。这可以避免不必要的指针取消引用。


3
投票

为什么不只传递 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);

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);

0
投票

#包括 #包括

使用命名空间 std;

void printMatrix(向量 < vector > 矩阵) {

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;
}

}

int main() {

vector < vector <int > > matrix( 5 , vector<int>(6));

for ( int x = 0; x < 5; x++)
    for ( int y = 0; y < 6; y++)
    {
        matrix [x][y] = x + y;
    }

printMatrix(matrix);

cout << endl;

return 0;

}

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.