std::all_of用于检查容器所有元素是否满足条件,需包含头文件,支持lambda、函数指针、函数对象和std::bind构造的谓词。

如果您需要快速验证容器中所有元素是否都满足某个特定条件,std::all_of 提供了一种简洁、高效且无副作用的遍历检查方式。以下是针对其谓词函数用法的详细说明:
一、基本语法与头文件依赖
std::all_of 定义于
1、包含必要头文件:#include
2、确保容器支持前向迭代器(如 std::vector、std::list、std::array 等)
3、谓词可为函数指针、lambda 表达式、函数对象或任何重载了 operator() 的类实例
二、使用 lambda 表达式作为谓词
lambda 是最常用且灵活的谓词形式,可直接捕获局部变量并内联定义逻辑,避免额外函数声明。
1、声明一个整型 vector:std::vector
2、调用 std::all_of 并传入 lambda:std::all_of(v.begin(), v.end(), [](int x) { return x % 2 == 0; })
3、该调用返回 true,因所有元素均为偶数
三、使用普通函数指针作为谓词
当逻辑较复杂或需复用时,独立函数更利于维护和测试,std::all_of 可直接接收其地址。
1、定义判断正数的函数:bool is_positive(int n) { return n > 0; }
2、构造含负数的容器:std::vector
3、执行检查:std::all_of(nums.begin(), nums.end(), is_positive)
4、该调用返回 false,因 -3 不满足条件
四、使用函数对象(仿函数)作为谓词
函数对象允许携带状态,适用于需在谓词中引用外部数据或维持计数等场景。
1、定义带阈值的仿函数类:struct GreaterThan { int threshold; explicit GreaterThan(int t) : threshold(t) {} bool operator()(int x) const { return x > threshold; } };
2、初始化容器:std::vector
3、创建谓词实例并调用:std::all_of(data.begin(), data.end(), GreaterThan(4))
4、该调用返回 true,因所有元素均大于 4
五、结合 std::bind 构造绑定谓词
std::bind 可用于部分绑定多参数函数,生成符合 std::all_of 要求的一元谓词。
1、定义二元比较函数:bool less_than(int a, int b) { return a
2、使用 std::bind 固定第二个参数:auto pred = std::bind(less_than, std::placeholders::_1, 10);
3、对容器 std::vector
4、该调用返回 true,因所有元素均小于 10
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











