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

C++ 传递给C+中函数的2D向量+;,c++,c++11,C++,C++11,当我声明一个像vectorv这样的向量并尝试将其传递给下面这样的函数时,它会工作: 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));

当我声明一个像
vectorv
这样的向量并尝试将其传递给下面这样的函数时,它会工作:

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;
}
int变化(向量&v)
{
v[0][0]=-1;
}
int main()
{
向量;
int a[]={1,2,3};
int b[]={4,5,6};
v、 推回(向量(a,a+3));
v、 推回(向量(b,b+3));
变化(五);

cout在第二个示例中,您声明了一个向量数组

因此,您可以使用:

int change(vector<int>(&v)[2])
int变化(向量(&v)[2])

int-change(vectorv[])//指针

int-change(vector*v)//指针

这到底是怎么回事,你想要从
vector[]
隐式转换到
vector
? 向量是一个包含东西的对象,数组不是吗

请注意,数组不需要通过引用传递,因此

int change(vector<int> v[])
int变化(向量v[]

做这个把戏

回答告诉你
vectorv[2]
是一个向量数组,而不是“2D向量”.它们是通过引用传递指向向量的指针,而不是通过引用传递指向向量的指针。两者都很好,我认为它满足了OP的期望…如果我这样传递向量会有什么问题?错误的是你说它是通过引用传递的,但它实际上是通过指向向量的指针。任何指针。它可以为空,也可以是指向单个向量的指针,它可以是指向长度为1或10000的数组的指针。您可以毫无理由地丢弃类型信息。是的;)明白了…我更新了答案您的答案仍然存在相同的问题。
int change(vector<int>v[]) // pointer
int change(vector<int>*v) // pointer
int change(vector<int> v[])