向量<向量<double>>运算符

vector <vector <double>> operator

本文关键字:gt lt 向量 运算符 double      更新时间:2023-10-16

我想修改一个

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

我试过了,但不幸的是无法编译。

编辑:我在结果[k][i]上使用"push_back((",这是一个双精度。

我修改了:

result[k][i].push_back(r);

在:

res[k][i]=r;

但我仍然收到分段错误:/

编辑2:问题在于向量向量的声明;我没有指定尺寸。它应如下所示:

vector <vector <double>> result(int size);

只需通过引用传递向量:

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

这是一个活生生的例子。

在你的例子中,res[k][i]是一个双精度,而不是一个向量,所以调用push_back会让你搞砸。改为拨打res[k].push_back(r)或只是写res[k][i] = r。此外,您可能希望通过引用而不是指针传递矢量。