整个数组作为C ++中的条件

时间:2017-04-20 15:44:22

标签: c++ arrays if-statement syntax

我正在做一个十五岁的游戏,我一直坚持关于胜利条件的数组语法。

这是我初始化瓷砖的方式:

string tile[4][4] = { { "15","14","13","12" },{ "11","10","9","8" },{ 
"7","6","5","4" },{ "3","1","2"," _" } };

这是我想要的获胜条件(基本上所有瓷砖都按顺序排列):

while (tile[4][4] != { {"1", "2", "3", "4"}, { "5","6","7","8" }, { 
"9","10","11","12" }, { "13","14","15","_" } }) {...}

我的问题是第二个会导致语法错误。可能由括号指定值的位置而不是像第一次初始化那样的大小引起。我希望条件是整个数组,而不仅仅是该数组中的特定值。

我已尝试用条件做空括号但又无效。

如何将整个数组表达为条件?

1 个答案:

答案 0 :(得分:2)

语法

string tile[4][4] = { ... };

声明一个内置语言数组(也称为C数组) - 或实际上是string s的数组数组。 C数组的问题在于它们通常不会按照我们喜欢的方式运行。特别是在这种情况下,检查与另一个C数组的相等性有点痛苦。幸运的是,有一个名为std::array<T, N>的标准库类型,它声明了一个类型T和大小N的数组,其行为更加规律。使用std::array而不是C数组几乎总是更好。

因此,我们可以说string tile[4][4]而不是std::array<std::array<string, 4>, 4> tile。但是在任何地方输入都有点痛苦,因此我们将为该类型引入别名,我们称之为board

using board = std::array<std::array<string, 4>, 4>;

现在我们可以像以前一样声明board

board tiles = { { "15","14","13","12" },
                { "11","10","9","8" },
                { "7","6","5","4" },
                { "3","1","2"," _" } };

现在我们还要做的是声明另一个包含获胜位置的变量:

const board completed = { { "1", "2", "3", "4" }, /* etc... */ }};

(此变量为const,因为获胜位置永远不会改变)。现在,在您的while循环中,您可以说:

while (tiles != completed) { ... }

将按照您的喜好工作,并且比以前更容易阅读。