gpt4 book ai didi

c++ - C++ 中的简单数组使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:42 24 4
gpt4 key购买 nike

我有一个正方形网格。每个方 block 要么是黑色的,要么是白色的。网格范围从 X:-10 到 10 和 Y:-10 到 10。我想用一个 2D bool 数组来表示网格——黑色为真,白色为假。数组索引只是正数 - 所以如果我想用数组创建网格,它将是 bool array [21][21]。这样可以完成工作,但是当我尝试访问一个元素时它会让人感到困惑。例如,如果我想访问网格上的坐标“0,3”,我的数组索引将为 [11][14]。这行得通,但它真的很乱。

是否有任何“更干净”的方法可以让索引与坐标相对应?

最佳答案

您可以将逻辑封装到提供所需接口(interface)的类中。为了让它有点通用,您可以考虑要存储的类型和维度可能会有所不同:

 template <typename T, int DimX, int DimY>
class offset_array2d
{
T data[ DimX*DimY ];
static const int offset_x = DimX / 2;
static const int offset_y = DimY / 2;
public:
offset_array2d() : data() {}
T& operator()( int x, int y ) {
return data[ (x+offset_x) + (y+offset_y)*DimY ];
}
T const & operator()( int x, int y ) const {
return data[ (x+offset_x) + (y+offset_y)*DimY ];
}
};

实现可能需要一些细节,但总体思路就在那里。应该有错误报告和更多的东西......维度可以成为一个运行时属性(而不是模板参数)但这需要动态分配,一个适当的析构函数和复制构造函数......我真的不想进入所有这一切只是为了一个想法。

频谱的另一端是用户代码,现在就很简单了:

 int main() {
offset_array2d<bool,21,21> board;
for ( int i = -10; i < 11; ++i )
board( i, i ) = true; // write the diagonal
}

关于c++ - C++ 中的简单数组使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com