2D向量传递给C ++中的函数

时间:2015-02-25 10:26:10

标签: c++ c++11

当我声明像vector<vector<int> >v这样的向量并尝试将其传递给下面的函数时,它可以工作:

int change(vector<vector<int> >&v)
{
    v[0][0]=-1;
}
int main()
{
    vector<vector<int> >v;
    int a[]={1,2,3};
    int b[]={4,5,6};
    v.push_back(vector<int>(a,a+3));
    v.push_back(vector<int>(b,b+3));
    change(v);
    cout<<v[0][0];
return 0;
}

但是当我宣布像vector<int>v[2]这样的向量并将其传递给函数时,就会导致错误。

int change(vector<vector<int> >&v)
{
    v[0][0]=-1;
}
int main()
{
    vector<int>v[2];
    int a[]={1,2,3};
    int b[]={4,5,6};
    v[0]=vector<int>(a,a+3);
    v[1]=vector<int>(b,b+3);
    change(v);
    cout<<v[0][0];
return 0;
}

我该怎么做?为什么会导致错误?

2 个答案:

答案 0 :(得分:1)

在第二个示例中,您声明了一个vector数组。

所以你可以使用:

int change(vector<int>(&v)[2])

int change(vector<int>v[]) // pointer

int change(vector<int>*v) // pointer

答案 1 :(得分:-2)

地狱如何运作,你想要从vector<int>[]隐式转换为vector<vector<int>>? vector是一个包含东西的对象,一个数组不是

请注意,数组不需要通过引用传递,所以

int change(vector<int> v[])

诀窍