3

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

我有一个类,实体,该向量应该包含一个指向的指针。我已正确包含实体向量标头,但它仍然无法正常工作。这是我正在尝试做的事情:

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“向量”的最佳方法是什么(尤其是在一个类中?)

谢谢!

4

2 回答 2

2

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

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

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

就我个人而言,我不会将向量的向量用于矩阵,正如我在以下帖子中所讨论的:

获取由向量向量表示的矩阵的第一列

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

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

于 2013-05-15T22:52:06.387 回答
0

向量<向量<向量>>dp(m,向量<向量>(n,向量(l,1)));

于 2020-10-19T18:00:35.933 回答