C++ std::find函数 容器元素查找
简介
std::find
函数是C++标准库内非常实用的一个函数,主要用于在给定范围内查找某个元素,如果找到该元素,则返回指向该元素的迭代器;如果没有找到,则返回指向范围末尾的迭代器(即 end()
)。
find函数原型
std::find
在头文件algorithm
中
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
find
函数是一个模板函数InputIt first
查询范围的开始迭代器(类似begin()
)InputIt last
查询范围的结束迭代器(类似end()
)const T& value
要查询的值
返回值
- 如果找到了值
value
,则返回一个迭代器,指向找到的该值的第一个匹配项。 - 如果没有找到,则返回
last
迭代器。
示例代码
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::find
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 查找元素 5
auto it = std::find(vec.begin(), vec.end(), 5);
if (it != vec.end()) {
std::cout << "找到元素 5,位置:" << std::distance(vec.begin(), it) << std::endl;
} else {
std::cout << "未找到元素 5" << std::endl;
}
// 查找元素 10(不存在)
it = std::find(vec.begin(), vec.end(), 10);
if (it == vec.end()) {
std::cout << "未找到元素 10" << std::endl;
}
return 0;
}
注意事项
std::find
对范围内的元素进行顺序查找,时间复杂度为 O(n),其中 n 是范围内的元素数量。std::find
可以用于任何支持随机访问迭代器、双向迭代器或前向迭代器的容器。
find_if函数原型
std::find_if
与find
一样在头文件algorithm
中
template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );
- InputIt first, InputIt last:这两个参数定义了要搜索的范围,其中
first
是指向范围开始的迭代器,last
是指向范围结束(但不包括该位置)的迭代器。 - UnaryPredicate p:这是一个一元谓词函数,它接受范围中的一个元素作为参数,并返回一个布尔值。如果谓词对某个元素返回
true
,则搜索停止,并返回指向该元素的迭代器。
返回值
- 如果找到了满足条件的元素,则返回指向该元素的迭代器。
- 如果没有找到满足条件的元素,则返回
last
迭代器。
代码示例
#include <iostream>
#include <vector>
#include <algorithm> // 包含 std::find_if
int main() {
std::vector<int> vec = {1, 5, 10, 15, 20};
// 使用 std::find_if 和 lambda 表达式查找第一个大于 10 的元素
auto it = std::find_if(vec.begin(), vec.end(), [](int i) {
return i > 10;
});
if (it != vec.end()) {
std::cout << "找到的元素:" << *it << std::endl;
} else {
std::cout << "未找到大于 10 的元素" << std::endl;
}
return 0;
}