【发布时间】:2013-05-10 16:29:35
【问题描述】:
我正在尝试在 C++ 中启动 3d 矢量。我希望它最初是 100 x 100 x 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“向量”的最佳方式是什么(尤其是在一个类中?)
谢谢!
【问题讨论】:
-
意识到由于单独的分配,您将获得糟糕的数据局部性。如果性能成为问题,请考虑使用一个大向量并手动计算偏移量。此外,如果向量“拥有”每个元素,则首选
std::unique_ptr或std::shared_ptr而不是原始指针。 -
使用二维向量数组是否存在内存问题?
-
这与您使用了多少 内存无关,而与分配内存的何处 有关。每个向量都将分配自己的内存堆,这意味着对它们进行迭代将使您在内存中四处游荡(从而导致许多缓存未命中)。不过,请先确保这对您来说确实是个问题。
-
如果我有一个二维向量数组,它在内存中的处理方式是否像指向堆分配内存的二维指针数组一样?
-
@Nathan no - 每个向量都是一个类,它有自己的成员和一堆在堆上分配的内存。通常它分配的内存比它需要的多,但如果你在构造函数中指定它应该是确切的数量。但这意味着您需要为班级成员提供存储空间。这不仅仅是指针。
标签: c++ class vector initialization