首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向量<向量<double>>算子

向量<向量<double>>算子
EN

Stack Overflow用户
提问于 2019-06-04 17:29:54
回答 2查看 1.9K关注 0票数 3

我想修改

代码语言:javascript
复制
vector <vector <double>>

main()中从另一个函数声明。

我将指向向量的指针作为函数参数传递;不幸的是,一旦我试图修改向量,就会出现分段错误。

最初这是我的代码:

代码语言:javascript
复制
#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++“编译的效果很好,但在运行程序时出现了分段错误。

我认为问题在于操作符的使用[],因为我将其应用于指针,因此可能需要如下所示:

代码语言:javascript
复制
result->operator[](k)->operator[](i).push_back(r);

我试过了但不幸的是没有编译。

编辑:我在结果上使用了"push_back()“,这是一个double。

我修改了:

代码语言:javascript
复制
result[k][i].push_back(r);

在:

代码语言:javascript
复制
res[k][i]=r;

但我仍然得到一个分割错误:/

编辑2:问题在于向量向量的声明;我没有指定大小。看起来应该是:

代码语言:javascript
复制
vector <vector <double>> result(int size);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 17:40:31

只需通过引用传递向量:

代码语言:javascript
复制
//                     -------------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);
    }
}

如果您真的想通过指针传递它,那么您必须取消引用它:

代码语言:javascript
复制
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,而是推回最外层向量中的向量。

您还需要使用向量填充第一个向量。如果向量的第一级为空,则不能将第二级推后,因为没有。

在向量中用一束空向量初始化向量,如下所示:

代码语言:javascript
复制
std::vector<std::vector<double>> result(5);

现在有5个空向量。

然后,要传递引用,需要从参数中删除&符号:

代码语言:javascript
复制
function(result, i);

下面是一个活生生的例子

票数 7
EN

Stack Overflow用户

发布于 2019-06-04 17:40:57

在您的示例中,res[k][i]是一个双重的,而不是一个向量,因此调用push_back会使您陷入困境。代之以调用res[k].push_back(r)或只编写res[k][i] = r。此外,您可能希望通过引用而不是指针传递向量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56448737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档