初始化3d向量c ++

时间:2013-05-15 22:49:30

标签: c++ class vector initialization

我正在尝试用c ++启动一个3d向量。我希望它最初是100乘100比1,但我遇到了问题。 (我知道基本上是2d,但我稍后会调整z轴向量的大小。)

我有一个类Entity,该向量应该包含一个指针。我已经正确地包含了实体向量标题,但它仍然无效。这就是我想要做的事情:

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“向量”的最佳方式是什么(特别是在课堂上?)

谢谢!

2 个答案:

答案 0 :(得分:2)

您需要在类构造函数中初始化它。

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

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

就个人而言,我不会使用矢量矢量作为矩阵,正如我在下面的帖子中所讨论的那样:

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

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

如果您想使用vector-vector-vector进行上述调整大小,则需要执行10,000次向量调整大小操作。您将在整个堆中传播元素存储,并且由于缓存未命中而导致性能下降。

答案 1 :(得分:0)

vector > dp(m,vector (n,vector(l,1)));