gpt4 book ai didi

C++ 动态(多阶段)3D vector 实例化和元素分配

转载 作者:行者123 更新时间:2023-11-30 02:08:27 26 4
gpt4 key购买 nike

好的,所以我需要在运行时创建一个 3D 数据结构,我决定使用 std::vector,问题如下:我在实例化时知道第一维的维度(当我创建我在其中使用它的对象),但直到运行时我才知道第二个维度,并且第 3 个维度的大小可能会有所不同。 我已经创建了 3D vector 并且运行时没有报错,但是我在分配值到元素时遇到了困难。

此代码是我正在创建的对象的一部分。在我的类定义中:

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 不断变化(并且是 double 值),您不必担心较低维度的索引,一切都会检查出来。)问题是 - 当我检查 splits[dim1][dim2][i] 值是 0.0(大概是所有)条目,自然这不是 提供的一些值

我也尝试过使用 .resize(sizeOfDimThree) 创建第 3 个维度,然后使用

splits[dim1][dim2][i] = whatever;

但这根本不起作用 - 根本没有创建任何对象/元素。

我意识到这可能不是最直接的问题措辞方式,但我相信这是最准确的,因为可能存在多点故障。

最佳答案

好吧,事实证明,从技术上讲一切都是正确的(尽管效率低下,我通过依次使用 .resize() 来获得适当的尺寸),我的“问题”是(因为它往往是)一个非常愚蠢的错误,为了验证我使用的所有内容都已分配:

printf("value assigned: %d", splits[dim1][dim2][dim3]);

而不是(因为splits 是一个double):

printf("value assigned: %.3f", splits[dim1][dim2][dim3]);

故事的寓意:注意您如何处理变量数据类型并发布完整源代码。

关于C++ 动态(多阶段)3D vector 实例化和元素分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6875474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com