首页 > 解决方案 > 带有未知大小的 STL 容器的网格类(不能使用矢量)

问题描述

我需要创建一个网格类,该类使用 STL 容器来存储单元格(预定义的枚举),用于生命游戏应用程序。本质上,头文件需要类似于:

class Grid {
private:
    std::array<Cell, N> grid_array;
public:
    Grid(const unsigned int width, const unsigned int height);
}

其中数组的长度 (N) 在构造函数中设置为 width*height。

代码必须遵守一个使用 STL 容器的规范,但是它已经被强烈暗示std::vector不应该使用。

我考虑过使用指向 an 的指针,std::array但已经读过,由于std::arrays不同的大小是根本不同的类型,因此不可能实现指针。有没有可行的解决方案std::array

标签: c++arraysstlconways-game-of-lifestdarray

解决方案


有什么解决方案可以让 std::array 起作用吗?

不,除非网格的大小在编译时已知,并且您可以将其设为模板参数。

我会用std::vector. 另一个选项是std::unique_ptr<Cell[]>,这需要更多的工作(如果您想Grid可复制,则必须提供自定义复制构造函数和赋值运算符)。


推荐阅读