Как передать 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);