我想将一些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);
}
所以在我完成之后,总会出现一个分段错误,我认为是因为子向量仍然是空的,它们没有被分配,所以我想知道如何修改它以达到我的目标?谢谢你的任何想法。
答案 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的副本。