我要修改
vector <vector <double>>
在main()
中由另一个函数声明。
我将指针作为函数参数传递给向量;不幸的是,一旦我尝试修改向量,就会出现分割错误。
最初这是我的代码:
#include <vector>
#include <iostream>
using namespace std;
void function(vector <vector <double>> *result, int k){
double r = 0.2;
for(int i=0;i<5;i++){
r = r*0.2;
result[k][i].push_back(r);
}
}
int main(){
vector <vector <double>> result;
for(int i=0;i<5;i++) function(&result, i);
for(int i=0;i<5;i++){
for(int j=0;j<5;j++) cout << result[i][j] << " ";
cout << " " << endl;
}
return 0;
}
使用“ g ++”进行的编译很好,但是运行程序时出现了分段错误。
我认为问题出在操作符[]的使用上,因为我将其应用于指针,所以我可能需要类似的东西:
result->operator[](k)->operator[](i).push_back(r);
我尝试过的但不幸的是没有编译。
编辑: 我在result [k] [i]上使用了“ push_back()”,这是一个两倍。
我修改过:
result[k][i].push_back(r);
在:
res[k][i]=r;
但我仍然遇到细分错误:/
编辑2: 问题在于向量的向量的声明。我没有指定尺寸。看起来应该像这样:
vector <vector <double>> result(int size);
答案 0 :(得分:7)
只需通过引用传递向量即可:
// -------------v
void function(vector<vector<double>>& res, int k){
//some calculations
for(int i=0;i<5;i++){
//calculations which give r (double) as result
res[k].push_back(r);
}
}
如果您真的想通过指针传递它,则必须取消引用它:
void function(vector<vector<double>>* res, int k){
//some calculations
for(int i=0;i<5;i++){
//calculations which give r (double) as result
(*res)[k].push_back(r);
}
}
正如@gambinaattori所说,您不能推回double
,而不能推回最外层向量中的向量。
您还需要先用向量填充向量。如果向量的第一级为空,则由于没有向量,因此无法将第二级推回。
使用一束空向量初始化向量的向量是这样的:
std::vector<std::vector<double>> result(5);
现在有5个空向量。
然后要通过引用传递,您需要从参数中删除&
符号:
function(result, i);
答案 1 :(得分:3)
在您的示例中,res[k][i]
是双精度的,而不是向量的,因此在其上调用push_back会给您带来麻烦。呼叫res[k].push_back(r)
或直接输入res[k][i] = r
。另外,您可能希望通过引用而不是指针传递矢量。