std::all_of用于检查容器所有元素是否都满足条件,空容器返回true;需传入迭代器范围和谓词,谓词参数类型应与元素类型一致,避免隐式转换和生命周期问题。
all_of 用来检查容器所有元素是否都满足某个条件
std::all_of 是 C++11 引入的算法,作用很直接:遍历区间内每个元素,对每个元素调用给定的谓词(predicate),只要有一个返回 false,就立刻返回 false;全部返回 true 才返回 true。它不修改容器,只做逻辑判断。
常见错误是误以为它能“找第一个不满足的元素”或“返回索引”——它不返回位置,也不提供中间结果,纯布尔判定。
- 必须传入两个迭代器(
begin,end)和一个可调用对象(lambda、函数指针、函数对象) - 空容器会返回
true(逻辑上“所有零个元素都满足”为真,即 vacuously true) - 谓词参数类型需与容器元素类型匹配,否则编译失败或隐式转换引发意外行为
怎么写谓词才能避免类型/语义陷阱
谓词本质是一个一元函数,接收一个 const T&(或按值)并返回 bool。最容易出错的是捕获外部变量时生命周期不一致,或用 int 比较 size_t 导致符号扩展问题。
例如判断 vector 是否全为正数:
立即学习“C++免费学习笔记(深入)”;
std::vector v = {1, 2, 3};
bool all_positive = std::all_of(v.begin(), v.end(), [](int x) { return x > 0; }); // ✅ 安全
但下面这个就有隐患: