How to pass 2-D vector to a function in C++?

后端 未结 3 1832
独厮守ぢ
独厮守ぢ 2020-12-29 11:05

If it is passed, is it passed by value or by reference?

void printMatrix(vector> *matrix);

...

vector> matr         


        
相关标签:
3条回答
  • 2020-12-29 11:45

    Why not passing just the 2d vector?

    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);
    
    0 讨论(0)
  • 2020-12-29 11:48

    Since your function declaration:

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

    specifies a pointer, it is essentially passed by reference. However, in C++, it's better to avoid pointers and pass a reference directly:

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

    and

    printMatrix(matrix1); // Function call
    

    This looks like a normal function call, but it is passed by reference as indicated in the function declaration. This saves you from unnecessary pointer dereferences.

    0 讨论(0)
  • 2020-12-29 11:56

    Well, first of all, you're creating it wrong.

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

    You can pass by value or by reference, or by pointer(not recommended). If you're passing to a function that doesn't change the contents, you can either pass by value, or by const reference. I would prefer const reference, some people think the "correct" way is to pass by value.

    void printMatrix(const vector<vector<int>> & matrix);
    
    // or
    void printMatrix(vector<vector<int>> matrix);
    
    // to call
    printMatrix(matrix1);
    
    0 讨论(0)
提交回复
热议问题