【发布时间】:2011-10-16 01:42:05
【问题描述】:
好的,所以我需要在运行时创建一个 3D 数据结构,我决定使用 std::vector,问题如下:我知道实例化时第一个维度的维度(当我创建我在其中使用它的对象),但直到运行时我才知道第二个维度的维度,并且第三个维度的大小可能会有所不同。 我已经创建了 3D 矢量,运行时没有抱怨,但是我在为元素赋值时遇到了困难。
此代码是我正在创建的对象的一部分。在我的类定义中:
std::vector< std::vector< std::vector<double> > > splits;
然后在对象构造函数中,为了创建/分配第一个维度,我有:
for(int i=0; i<sizeOfDimOne; i++){ //create 1st dimension
splits.push_back( std::vector< std::vector<double> >() );
}
根据用户输入,我需要创建一定大小的第二维,为此我调用了一个方法:
for(int i=0; i<sizeOfDimOne; i++){
for(int j=0; j<sizeOfDimTwo; j++) //create second dimension
splits[i].push_back( std::vector<double>() );
}
但是,当我开始赋值时:
for(int i=0; i<sizeOfDimThree; i++){
splits[dim1][dim2].push_back( someValue ); //adding an element to the 3rd dim
}
(someValue 不断变化(并且是双精度),您不必担心低维索引,一切都检查出来。)问题是 - 当我检查 splits[dim1][dim2][i] 值是 0.0 对于(大概所有)条目,自然这不是 提供的一些值。
我也尝试使用 .resize(sizeOfDimThree) 创建第三维,然后使用分配
splits[dim1][dim2][i] = whatever;
但这根本不起作用 - 根本没有创建任何对象/元素。
我意识到这可能不是最直接的表达问题的方式,但我相信它是最准确的,因为可能存在多点故障。
【问题讨论】:
-
您确实意识到您可以使用 1 个暗淡向量并自己进行数学运算...
-
您是否在任何地方按值传递拆分? (即,而不是通过引用)。还是类的成员方法对其进行的所有操作?
-
你有没有考虑过使用 boost::multi_array,它有调整大小等。
-
你说“根本没有创建对象/元素”是什么意思,你是怎么得出这个结论的?
-
@Michael Dorgan:是的。 @C约翰逊:对它的所有操作都是通过类方法来执行的。 @Gearoid Murphy:在调试过程中,我依次检查了每个维度的大小。
标签: c++ vector 3d variable-assignment dynamic-memory-allocation