【发布时间】:2015-10-14 23:37:39
【问题描述】:
我正在将this Python 文件的此类片段翻译成 C++:
SIDE = 3
LINES = []
for y in range(SIDE):
row = tuple((x, y) for x in range(SIDE))
LINES.append(row)
for x in range(SIDE):
col = tuple((x, y) for y in range(SIDE))
LINES.append(col)
LINES.append(tuple((x, x) for x in range(SIDE)))
LINES.append(tuple((SIDE - x - 1, x) for x in range(SIDE)))
LINES 保存井字游戏中可能线条的 (x, y) 坐标。所以对于SIDE = 3 它成立:
[((0, 0), (1, 0), (2, 0)),
((0, 1), (1, 1), (2, 1)),
((0, 2), (1, 2), (2, 2)),
((0, 0), (0, 1), (0, 2)),
((1, 0), (1, 1), (1, 2)),
((2, 0), (2, 1), (2, 2)),
((0, 0), (1, 1), (2, 2)),
((2, 0), (1, 1), (0, 2))]
SIDE 值可以更改。
我尝试过的
性能至关重要(这就是我使用 C++ 的原因),所以我只想计算一次 LINES。因此,我选择将LINES 实现为TicTacToeState 类的静态成员。
我从这样的代码开始:
static char init_lines() {
return 'a';
}
class TicTacToeState {
static char LINES;
};
char TicTacToeState::LINES = init_lines();
它有效。如何将LINES 更改为数组?也许矢量会更好?有双吗?
也许静态成员不是最好的选择,也许有更简单的方法?
你会如何把它翻译成 C++?
我们知道LINES 的大小,它总是2 * SIDE + 2.
特殊要求
所有 C++ 代码必须在一个 .cpp 文件中,没有标题。为什么?因为这是机器人竞赛库的片段,通常您只能提交一个文件。
【问题讨论】:
-
您可以只返回一个指向数组第一个元素的
char*,这就是您通常在 C++ 中返回数组的方式。查看stackoverflow.com/questions/5660527/… 或stackoverflow.com/questions/3473438/return-array-in-a-function -
@RNar 您错过了问题的重点。我不是在问如何从函数中返回一个数组,我是在问如何用我想要的任何东西来初始化静态成员数组。
-
我的错,我以为你只是用 char 作为例子。
标签: c++ arrays static initialization