如何在矢量c ++

时间:2017-01-05 21:58:31

标签: c++ vector

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

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);
}

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

3 个答案:

答案 0 :(得分:0)

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

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

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

这应该可以正常工作。

答案 1 :(得分:0)

您可以通过复制将参数发送到您的函数,您应该通过它发送 参考:

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

答案 2 :(得分:0)

您当前正在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的副本。