📅  最后修改于: 2023-12-03 15:13:55.169000             🧑  作者: Mango
std::find_if()
函数是 C++ STL 的算法库中的一个函数,用于在指定范围内按照指定条件查找元素。
函数原型如下:
template <class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
其中,first
和 last
分别表示所要查找的元素的起始位置和终止位置(不包括终止位置)。pred
是一个一元谓词,用于指定查找条件。
函数返回的是 InputIterator
类型的迭代器,指向第一个符合查找条件的元素。
下面是一个简单的示例,展示了如何使用 std::find_if()
函数查找一个字符串数组中对应某个前缀的第一个字符串。
#include <iostream>
#include <string>
#include <algorithm>
bool starts_with(const std::string& str, const std::string& prefix) {
return str.size() >= prefix.size() && str.compare(0, prefix.size(), prefix) == 0;
}
int main() {
std::string arr[] = {"apple", "banana", "cat", "dog", "elephant"};
std::string prefix = "b";
auto it = std::find_if(arr, arr + 5, [&](const std::string& str) {
return starts_with(str, prefix);
});
if (it != arr + 5) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Not found" << std::endl;
}
return 0;
}
上面的程序中,我们使用了一个名为 starts_with()
的函数作为查找条件,它判断给定的字符串是否以指定的前缀开头。具体来说,它首先判断字符串长度是否不小于前缀长度,并且使用 std::string::compare()
方法比较前缀和字符串中相应位置的字符是否相同。如果相同,就继续比较下一个字符,如果最终都相同,则说明字符串以该前缀开头。
在主函数中,我们定义了一个字符串数组 arr
,表示我们所要查找的范围。同时,我们定义了一个前缀字符串 prefix
,表示我们要查找的条件。
我们调用 std::find_if()
函数,将数组 arr
和前缀字符串 prefix
作为参数传入,并使用一个 lambda 表达式作为谓词,该 lambda 表达式调用 starts_with()
函数来判断字符串是否符合查找条件。
std::find_if()
函数返回第一个符合条件的元素的迭代器,我们将其存入变量 it
。最后,我们判断 it
是否等于数组末尾的迭代器,如果不是,就说明找到了符合条件的元素,并输出它的值;否则,就说明没有找到符合条件的元素。
std::find_if()
函数是 C++ STL 中非常实用的一种算法,可以用于在指定范围内按照指定条件查找元素。使用时需要注意指定查找范围和指定查找条件,特别是对于谓词的定义需要非常清晰明确。