(C++) 使用 OR 运算符将值与数组的每个元素进行比较的更简单方法?
(C++) A simpler way to compare a value to every element of an array with the OR operator?
我正在尝试使用 类 在 C++ 中构建一个计算器,我遇到了这个问题。这是代码:
(现在这不是一个真正的问题,但我认为它在未来会成为一个问题)
char opcheck;
char opDisp[6] = { '+', '-', '*', '/', 'p', 'r' };
while (opcheck==opDisp[0] || opcheck==opDisp[1] || opcheck==opDisp[2] || opcheck==opDisp[2] || opcheck==opDisp[4] || opcheck==opDisp[5]);
所以,我的问题是 while 语句;我如何比较变量 opcheck 与 opDisp 数组的每个元素,而无需为每个元素键入“opcheck==opDisp[n]”?
C++ 是否有任何内置数组函数,例如 "if(opcheck==opDisp[每次使用 OR 运算符从 1 到 5])"?
您可能会使用 std::find
while (std::find(std::begin(opDisp), std::end(opDisp), opcheck) != std::end(opDisp))
您可以使用 any_of
从 C++11 开始的标准算法:
if (std::any_of(std::cbegin(opDisp), std::cend(opDisp), [=](char x) { return x == opcheck; })) {
...
}
或者在 C++20 中 std::ranges
:
if (std::ranges::any_of(opDisp, [=](auto x) { return x == opcheck; })) {
...
}
你没有问(关于效率),但你必须使用数组吗?数组中的任何搜索都将具有线性复杂度。如果您将运算符保持在 unordered_set
(散列 table)中,搜索将具有恒定的复杂性,并且相同的 std::find
将起作用,只是速度更快。
我正在尝试使用 类 在 C++ 中构建一个计算器,我遇到了这个问题。这是代码: (现在这不是一个真正的问题,但我认为它在未来会成为一个问题)
char opcheck;
char opDisp[6] = { '+', '-', '*', '/', 'p', 'r' };
while (opcheck==opDisp[0] || opcheck==opDisp[1] || opcheck==opDisp[2] || opcheck==opDisp[2] || opcheck==opDisp[4] || opcheck==opDisp[5]);
所以,我的问题是 while 语句;我如何比较变量 opcheck 与 opDisp 数组的每个元素,而无需为每个元素键入“opcheck==opDisp[n]”?
C++ 是否有任何内置数组函数,例如 "if(opcheck==opDisp[每次使用 OR 运算符从 1 到 5])"?
您可能会使用 std::find
while (std::find(std::begin(opDisp), std::end(opDisp), opcheck) != std::end(opDisp))
您可以使用 any_of
从 C++11 开始的标准算法:
if (std::any_of(std::cbegin(opDisp), std::cend(opDisp), [=](char x) { return x == opcheck; })) {
...
}
或者在 C++20 中 std::ranges
:
if (std::ranges::any_of(opDisp, [=](auto x) { return x == opcheck; })) {
...
}
你没有问(关于效率),但你必须使用数组吗?数组中的任何搜索都将具有线性复杂度。如果您将运算符保持在 unordered_set
(散列 table)中,搜索将具有恒定的复杂性,并且相同的 std::find
将起作用,只是速度更快。