Android常用C++特性之std::none_of
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。
std::none_of
是 C++ 标准库中的一个算法,用于检查范围中的所有元素是否都不满足指定的条件。如果范围内的所有元素都不满足给定的条件,则返回 true
;如果至少有一个元素满足条件,则返回 false
。
语法
#include <algorithm>
template <class InputIt, class UnaryPredicate>
bool none_of(InputIt first, InputIt last, UnaryPredicate p);
参数
first
,last
:指定要检查的范围,左闭右开[first, last)
。p
:一元谓词(函数或 lambda 表达式),用于判断元素是否满足条件。
返回值
- 如果范围中的所有元素都不满足谓词
p
,则返回true
。 - 如果至少有一个元素满足谓词
p
,则返回false
。
示例
1. 检查所有元素是否不为负数
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用 std::none_of 检查是否所有元素都不为负数
bool result = std::none_of(vec.begin(), vec.end(), [](int x) {
return x < 0; // 谓词:检查是否为负数
});
if (result) {
std::cout << "No negative numbers in the vector." << std::endl;
} else {
std::cout << "There are negative numbers in the vector." << std::endl;
}
return 0;
}
输出:
No negative numbers in the vector.
2. 检查字符串是否没有包含空字符
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "Hello, World!";
// 使用 std::none_of 检查字符串是否不包含空字符
bool result = std::none_of(str.begin(), str.end(), [](char c) {
return c == ' '; // 谓词:检查是否为空格
});
if (result) {
std::cout << "The string contains no spaces." << std::endl;
} else {
std::cout << "The string contains spaces." << std::endl;
}
return 0;
}
输出:
The string contains spaces.
3. 自定义对象与谓词
std::none_of
也可以用于容器中的自定义对象。下面是一个例子,检查是否所有对象的某个成员都不满足条件。
#include <iostream>
#include <vector>
#include <algorithm>
struct Person {
std::string name;
int age;
};
int main() {
std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
// 检查是否所有人都不超过 40 岁
bool result = std::none_of(people.begin(), people.end(), [](const Person& p) {
return p.age > 40; // 谓词:检查年龄是否超过 40
});
if (result) {
std::cout << "No one is older than 40." << std::endl;
} else {
std::cout << "Someone is older than 40." << std::endl;
}
return 0;
}
输出:
No one is older than 40.
应用场景
- 检查容器中是否所有元素都不符合某个条件。
- 配合
std::all_of
和std::any_of
一起使用,用于处理范围的逻辑判定。
总结
std::none_of
检查范围内的所有元素是否都不满足给定的条件。- 如果所有元素都不满足条件,返回
true
;如果至少有一个元素满足条件,返回false
。 - 可用于数组、向量或其他支持迭代器的容器。