【问题标题】:how to store vector in a vector c++ [duplicate]如何将向量存储在向量c ++中[重复]
【发布时间】:2017-01-05 21:58:31
【问题描述】:

我想将一些 int 向量存储到一个向量中,所以首先我初始化一个向量类型向量,然后迭代开始到结束,并将 int 数字存储到从 0 到 4 的每个子向量中,如下代码:

std::vector<std::vector<int>  > v(12);

void fun_1(std::vector<int> a )
{
    for (int i = 0; i < 5; ++i)
    {
        a.push_back(i);
    }
}
int main()
{

    for (int i = 0; i < 12; ++i)
    {
        fun_1(v[i]);
    }

    cout<<v[0].at(2);
}

所以在我这样做之后,总是有一个分段错误,我认为是因为子向量仍然是空的,它们没有被分配,所以我想知道如何修改它以达到我的目标?感谢您的任何想法。

【问题讨论】:

  • 就像你做的那样。将cout 放在函数内部。
  • 需要通过引用将向量传递给函数。
  • @latedeveloper 谢谢!问题解决了

标签: c++ vector


【解决方案1】:

函数 fun_1 通过复制接受其输入参数,因此它只修改向量的本地副本,而不是传入的原始副本。 所以原来的还是空的。一旦您尝试访问其中一个(不存在的)元素,它就会引发异常。

如果您更改 fun_1 以通过引用接受其参数:

void fun_1(std::vector<int>& a )

这应该可以正常工作。

【讨论】:

  • 非常感谢!问题解决了
【解决方案2】:

您通过 copy 向您的函数发送参数,您应该通过 参考:

void fun_1(std::vector<int> &a )
{
    for (int i = 0; i < 5; ++i)
    {
        a.push_back(i);
    }
}

【讨论】:

    【解决方案3】:

    您当前正在 fun_1 中按值传递向量,因此一旦您返回,您对 a 所做的所有更改都将被丢弃。 fun_1 应该看​​起来像

    void fun_1(std::vector<int> &a )
    {
       for (int i = 0; i < 5; ++i)
       {
          a.push_back(i);
       }
    }
    

    这将导致 main 中对 fun_1 的调用实际操作 v,而不是操作 v 的副本。

    【讨论】:

    • 看起来@Morteza 打败了我。
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多