Как передать 2-D вектор в функцию в C ++? - PullRequest
10 голосов
/ 31 октября 2010

Если оно передано, передается ли оно по значению или по ссылке?

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

...

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

Ответы [ 3 ]

18 голосов
/ 31 октября 2010

Поскольку ваше объявление функции:

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

указывает указатель, он по существу передается по ссылке. Однако в C ++ лучше избегать указателей и передавать ссылку напрямую:

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

и

printMatrix(matrix1); // Function call

Это похоже на обычный вызов функции, но оно передается по ссылке, как указано в объявлении функции. Это избавит вас от ненужных указателей разыменования.

1 голос
/ 17 августа 2018

Почему бы не передать только 2-й вектор?

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 голос
/ 31 октября 2010

Ну, во-первых, вы создаете это неправильно.

vector<vector<int>> matrix1(3, vector<int>(3,0));

Вы можете передавать по значению или по ссылке, или по указателю (не рекомендуется). Если вы переходите к функции, которая не изменяет содержимое, вы можете передать либо по значению, либо по константной ссылке. Я бы предпочел константную ссылку, некоторые люди думают, что «правильный» способ - передать по значению.

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

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

// to call
printMatrix(matrix1);
...