(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 将起作用,只是速度更快。