我正在尝试用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“向量”的最佳方式是什么(特别是在课堂上?)
谢谢!
答案 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