gpt4 book ai didi

c++ - 初始化 3d vector c++

转载 作者:太空狗 更新时间:2023-10-29 21:45:53 25 4
gpt4 key购买 nike

我正在尝试在 C++ 中启动 3d vector 。我希望它最初是 100 x 100 x 1,但我遇到了问题。 (我知道基本上是 2d,但稍后我会调整 z 轴 vector 的大小。)

我有一个类 Entity,该 vector 应包含指向的指针。我已经正确地包含了 Entity vector header ,但它仍然无法正常工作。这是我正在尝试做的事情:

vector <vector <vector <Entity* > > > matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));

编译器给出的错误是“数字常量之前的预期标识符”。我仔细检查了一下,这一行之前没有遗漏分号或任何内容。如果我删除这一行,代码会干净地编译。

这直接在函数定义中的“private:”行之后。成员变量可以接受构造函数吗?我也试过把

vector <vector <vector <Entity* > > > matrix;

在 .h 文件中,以及

matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));

在 .cpp 文件的构造函数中,但这也不起作用(调用不匹配,从 int 到 Entity* 的转换无效)

声明此(尤其是在类中)的 3d“vector ”的最佳方法是什么?

谢谢!

最佳答案

您需要在您的类构造函数中对其进行初始化。

class MyClass
{
public:
MyClass()
: matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)))
{}

private:
vector <vector <vector <Entity* > > > matrix;
};

就我个人而言,我不会对矩阵使用 vector vector ,正如我在以下帖子中所讨论的那样:

Get the first column of a matrix represented by a vector of vectors

我建议您采用类似的方法,但适用于 3D 矩阵。本质上,您将前两个维度视为一个矩形(在您的情况下为正方形),然后堆叠这些矩形以创建第三个维度。如果您想将第 3 个维度的大小调整为 10 个元素,您将再添加 9 个 100x100 的 block 。那将是一个单一的 vector 调整大小操作。

如果您想使用 vector - vector - vector 执行上述调整大小操作,则需要执行 10,000 次 vector 调整大小操作。您会在整个堆中分散您的元素存储,并且由于缓存未命中而获得糟糕的性能。

关于c++ - 初始化 3d vector c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576268/

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