std::all_of 是 c++11 引入的算法,用于判断容器中所有元素是否都满足某个条件,不修改容器,空容器返回 true;正确调用需包含 ,传入左闭右开迭代器范围和单参数可调用对象。

直接说结论:std::all_of 是 C++11 引入的算法,用于判断容器中**所有元素是否都满足某个条件**,它不修改容器,只返回 bool;不存在 std::all_of_c++ 这个名字,那是误写或混淆。
如何正确调用 std::all_of
必须包含头文件 <algorithm></algorithm>,并传入迭代器范围和一个可调用对象(lambda、函数指针或函数对象):
#include <algorithm>
#include <vector>
#include <iostream>
std::vector<int> v = {2, 4, 6, 8};
bool all_even = std::all_of(v.begin(), v.end(), [](int x) { return x % 2 == 0; });
// all_even 为 true
- 第一个参数是起始迭代器(
v.begin()),第二个是结束迭代器(v.end()),注意是左闭右开区间 - 第三个参数必须可调用,且接受单个元素类型参数,返回
bool或能隐式转为bool的值 - 空容器会返回
true(逻辑上“所有零个元素都满足”为真,即 vacuously true)
常见错误:把 std::all_of 当成成员函数或写错名字
std::all_of 是命名空间 std 下的非成员函数,不是容器的方法,也不叫 all_of_c++ 或 all_of_cpp —— 编译器会报 error: 'all_of_c++' is not a member of 'std' 这类错误。
- 别写成
v.all_of(...)(vector 没这方法) - 别漏掉
std::前缀,且没用using namespace std;时不能省略 - 别拼错:不是
all_ofs、all_off、std::allOf(C++ 标准里是下划线分隔,全小写)
和 std::any_of、std::none_of 的关键区别
三者接口完全一致,但语义不同,容易混用:
立即学习“C++免费学习笔记(深入)”;
-
std::all_of:全部为真 → 返回true -
std::any_of:至少一个为真 → 返回true -
std::none_of:全部为假 → 返回true
比如检查是否“全为正数”,用 all_of;检查“是否存在负数”,该用 any_of;检查“没有零”,用 none_of。选错会导致逻辑翻转,而且不容易在测试中暴露(尤其边界情况如空容器)。
最易被忽略的一点:短路行为只发生在算法内部实现层面,你无法控制或感知哪个元素触发了 false 返回;如果需要定位具体失败项,得自己遍历或改用 std::find_if_not。









