[英]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.