我正在尝试在 bool 的向量上使用 any_of 函数。any_of 函数需要一个返回 bool 的一元谓词函数。但是,当输入到函数中的值已经是我想要的 bool 时,我无法弄清楚要使用什么。我会猜测一些函数名称,如“logical_true”或“istrue”或“if”,但这些似乎都不起作用。我在下面粘贴了一些代码以显示想法。
// Example use of any_of function.
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {
vector<bool>testVec(2);
testVec[0] = true;
testVec[1] = false;
bool anyValid;
anyValid = std::find(testVec.begin(), testVec.end(), true) != testVec.end(); // Without C++0x
// anyValid = !std::all_of(testVec.begin(), testVec.end(), std::logical_not<bool>()); // Workaround uses logical_not
// anyValid = std::any_of(testVec.begin(), testVec.end(), std::logical_true<bool>()); // No such thing as logical_true
cout << "anyValid = " << anyValid <<endl;
return 0;
}
您可以使用 lambda(自 C ++ 11):
bool anyValid = std::any_of(
testVec.begin(),
testVec.end(),
[](bool x) { return x; }
);
here是一个真实的例子。
当然,您也可以使用函子:
struct logical_true {
bool operator()(bool x) { return x; }
};
// ...
bool anyValid = std::any_of(testVec.begin(), testVec.end(), logical_true());
here是该版本的实时示例。
看起来你想要一个像身份函数(一个返回它传递的任何值的函数)这个问题似乎表明std::
中不存在这样的东西:
在这种情况下,最简单的事情可能是写
bool id_bool(bool b) { return b; }
并使用它。

我最终在这里寻找一个 C ++ 标准库符号来做到这一点:
template<typename T>
struct true_ {
bool operator()(const T&) const { return true; }
};
我认为这是 OP 想要的,并且可以使用,例如,如下:
std::any_of(c.begin(), c.end(), std::true_);
我在标准库中找不到这样的东西,但是上面的结构可以工作并且足够简单。
虽然上面的any_of
表达式在孤立中是没有意义的(它总是返回true
,除非c
为空),但true_
的有效用例是作为需要谓词的模板类的默认模板参数。
从 C ++ 20 开始,我们得到std::identity
,这可能会有所帮助。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(26条)