【问题标题】:How to pass a 2D vector to a function using pass-by-reference C++如何使用传递引用 C++ 将 2D 向量传递给函数
【发布时间】:2018-10-15 18:23:13
【问题描述】:
struct st
{
    int to, cost;
};

void fun(vector<st>&v1[10])
{
    vector<st>v2[10];
    v1=v2;
}

int main()
{
    vector<st>arr[10];
    fun(arr);
}

我想通过引用在函数中传递一个二维向量,并将该向量与该函数中的另一个向量交换。但我收到错误。我不想用对向量来做。我想在这里使用结构。怎么办?

here is a screenshot of my error messege

【问题讨论】:

  • 你有一个包含 10 个向量的数组。你为什么要混合类型?为什么不是std::vector&lt;std::vector&lt;st&gt;&gt;
  • 直接错误是vector&lt;st&gt;&amp; v1[10] 是一个引用数组。对数组的引用看起来像vector&lt;st&gt; (&amp;v1)[10]。所有这一切都可以通过not首先使用C风格的数组来避免。
  • 我同意@CoryKramer:你在这里展示的名义上不是“二维向量”,而是一个混蛋:一维向量的一维数组(逻辑上是二维数据结构)。

标签: c++ function structure 2d-vector


【解决方案1】:

一个主要问题:当传递一个数组作为参数时,真正传递的是一个指针

改用std::array 可以轻松解决:

void fun(std::array<std::vector<st>, 10>& v1)
{
    std::array<std::vector<st>, 10> v2;
    // Initialize v2...
    v1 = v2;
}

int main()
{
    std::array<std::vector<st>, 10> arr;
    fun(arr);
}

在上面介绍了std::array之后,我宁愿推荐返回数组,而不是通过引用传递:

std::array<std::vector<st>, 10> fun()
{
    std::array<std::vector<st>, 10> v2;
    // Initialize v2...
    return v2;
}

int main()
{
    std::array<std::vector<st>, 10> arr = fun();
}

【讨论】:

  • 只有当函数需要一个数组时,数组才会作为指针传递。如果函数需要对数组的引用,则改为传递引用。一个示例是 Bo Persson 建议的带有适当括号的 OP 代码。
  • @PeterA.Schneider 是的,但是我们遇到了分配v1 = v2 的问题。不能分配 C 样式的数组。 std::array 也解决了这个问题。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多