【问题标题】:2D vector passing to a function in C++ [duplicate]2D向量传递给C++中的函数[重复]
【发布时间】:2015-02-25 10:26:10
【问题描述】:

当我声明像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&lt;int&gt;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;
}

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

【问题讨论】:

  • your previous question 的答案告诉你vector&lt;int&gt;v[2] 是一个向量数组,而不是“二维向量”。

标签: c++ c++11


【解决方案1】:

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

所以你可以使用:

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

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

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

【讨论】:

  • 那些传递指向向量的指针,而不是通过引用传递向量。
  • 两者都工作正常,我认为它满足了 OP 的期望......如果我以这种方式传递向量有什么问题?
  • 错在你说它是通过引用传递,但它实际上是传递一个指向向量的指针。任何指针。可以是null,可以是指向单个向量的指针,也可以是指向长度为1或10000的数组的指针。你无缘无故地丢掉类型信息。
  • 是的 ;) 明白了……我更新了答案
  • 你的回答还是有同样的问题。
【解决方案2】:

这到底是怎么工作的,你想要从 vector&lt;int&gt;[]vector&lt;vector&lt;int&gt;&gt; 的隐式转换? 向量是包含事物的对象,数组不是

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

int change(vector<int> v[])

搞定

【讨论】:

    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2013-06-04
    • 2018-10-15
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多