【发布时间】:2020-07-09 20:44:56
【问题描述】:
我需要创建一个网格类,它使用一个 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。
我曾考虑使用指向std::array 的指针,但读到由于不同大小的std::arrays 是根本不同的类型,因此不可能实现指针。有什么解决方案可以让std::array 起作用吗?
【问题讨论】:
-
为什么不能使用
std::vector?std::array只是一个模板,std::array<T,n>和std::array<T,m>是不同的类型(对于m != n),因此指针不会有帮助 -
你能参数化
grid的大小吗?即使它成为template <size_t N> class grid;? -
似乎很清楚您应该使用类似
std::map<std::pair<int,int>, Cell>的东西来实现稀疏矩阵。 -
这是作业的一部分,我的讲师在其中指出,由于效率低下,不应使用
std::vector,而应使用一维数组。是的,我认为模板可以使用,template <size_t N>将如何与数组一起使用?
标签: c++ arrays stl conways-game-of-life stdarray