繁体   English   中英

C ++中的3维向量-传递给函数之前大小的部分定义

[英]3 dimensional vector in c++ - partial definition of size before passing to function

我想定义一个3维向量,其前两个维是固定的,但是我希望第三个维由在循环内调用的函数动态填充。

我不确定是否允许这样做,但是无论如何我都尝试通过以下方式实现它:

#define NUM 6

vector<vector<vector<double> > > foo;

foo.resize(NUM);
for(int j1=0; j1 < NUM; j1++){
    foo[j1].resize(NUM);
}

while(<condition>){
    fun(foo);
}

在这里我将功能声明为fun

void fun(vector<vector<vector<double> > >& foo){
    for(int j1=0; j1<NUM; j1++){
        for(int j2=j1+1; j2<NUM; j2++){
             if(<condition>){
                   foo[j1][j2].push_back(<value>);
             }
         }
     }
 }

我最初在NUM等于5的条件下对此进行了测试,但一切看起来都很好,但是当我尝试将其更改为6时,出现了分段错误。

我已经看到,即使我不尝试用push_back填充第3维(即,我注释了push_back行),对以foo作为参数的函数的简单调用也弄乱了foo的尺寸,即如果我插入一个

  cout << foo.size() << endl;

在while循环中,我看到foo的维数在第一次迭代后发生了变化,从NUM更改为随机数。

我还发现这与平台有关,因为我在Linux Ubuntu而不是MacOSX上遇到错误。 所以我想我在做与内存分配有关的确实错误的事情,但是我不知道到底是什么。 有人可以向我解释吗?

谢谢您的帮助!

实际上,您可以使用vectors构造函数创建一个固定数量大小的3D矩阵,并使用所需大小的2D矩阵,该构造函数将元素的数量和用来复制该元素的元素的数量作为参数。 看起来像这样:

#include <iostream>
#include <vector>

int main() {
    const size_t NUM = 6;
    std::vector< std::vector< std::vector<double> > > Matr(NUM, std::vector< std::vector<double> >(NUM, std::vector<double>()));
    std::cout << "num 2D matrices - " << Matr.size() << std::endl;
    for(size_t j1 = 0; j1 < Matr.size(); ++j1){
        std::cout << "num rows - " << Matr[j1].size() << std::endl;
        for(size_t j2 = 0; j2 < Matr[j1].size(); ++j2) {
            Matr[j1][j2].push_back(0.09l);
            std::cout << "num columns - " << Matr[j1][j2].size() << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}
foo.resize(NUM);  
for(int j1=0; j1 < NUM; j1++){  
    foo[j1].resize(NUM);
}

在这里,您正在调整foo[j1]大小,但是foo[j1]还没有任何内容。
所以foo[j1]只是一个垃圾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM