我一直在尝试这样做,但是问题是最终结果总是存在某些错误或缺失。我有很多if语句,我想看看是否可以通过使用for循环来减少它。
char matrix[3][3] = {
{'A','A','A'},{'B','A','B'},{'C','A','C'}
};
if (matrix[0][0] == 'A' && matrix[0][1] == 'A' && matrix[0][2] == 'A') {
cout << "Found!" << endl;
}
if语句还有很多,我没有将其放在此处,因为相同的东西只是索引不同。
我试图做这样的for循环,
for (int i = 0; i < matrix[0][2]; i++) {
if (matrix[0][0] == matrix[0][1] && matrix[0][0] == matrix[0][2])
cout << "Found!" << endl;
break;
}
与将近20行的if语句相比,它看起来更有条理,但是仍然缺少一些部分。例如,在数组中[0][1]
,[1][1]
和[2][1]
都具有字符'A'
。当相同字符垂直或水平出现在同一行中时,如何在for循环中实现此功能以打印出消息。
您可以使用标准算法方便地表达这一点:
if (std::any_of(std::begin(matrix), std::end(matrix),
[](auto const & row) {
return std::all_of(std::begin(row), std::end(row),
[](char c) {
return c == 'A';
});
}))
{
std::cout << "Found";
}
从C ++ 20开始,这变得更加容易读写:
namespace rs = std::ranges;
if (rs::any_of(matrix, [](auto const & row) {
return rs::all_of(row, [](char c) {
return c == 'A';
});
}))
{
std::cout << "Found";
}
这是一个演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句