我想修改
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);我试过了但不幸的是没有编译。
编辑:我在结果上使用了"push_back()“,这是一个double。
我修改了:
result[k][i].push_back(r);在:
res[k][i]=r;但我仍然得到一个分割错误:/
编辑2:问题在于向量向量的声明;我没有指定大小。看起来应该是:
vector <vector <double>> result(int size);发布于 2019-06-04 17:40:31
只需通过引用传递向量:
// -------------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);发布于 2019-06-04 17:40:57
在您的示例中,res[k][i]是一个双重的,而不是一个向量,因此调用push_back会使您陷入困境。代之以调用res[k].push_back(r)或只编写res[k][i] = r。此外,您可能希望通过引用而不是指针传递向量。
https://stackoverflow.com/questions/56448737
复制相似问题