find和find_if的用法和区别
时间: 2023-05-17 16:07:06 浏览: 141
find和find_if都是STL中的查找算法,用于在容器中查找指定元素。
find的用法是:
```
iterator find (iterator first, iterator last, const T& val);
```
其中,first和last是容器的起始和结束迭代器,val是要查找的元素。如果找到了,返回指向该元素的迭代器,否则返回last。
find_if的用法是:
```
iterator find_if (iterator first, iterator last, UnaryPredicate pred);
```
其中,first和last是容器的起始和结束迭代器,pred是一个一元谓词,用于判断元素是否符合条件。如果找到了符合条件的元素,返回指向该元素的迭代器,否则返回last。
区别在于,find是根据元素的值来查找,而find_if是根据元素是否符合条件来查找。因此,find可以用于查找基本类型和自定义类型的元素,而find_if只能用于查找符合条件的元素。
举个例子,假设有一个vector<int> v,要查找其中是否有元素等于3,可以使用find:
```
auto it = find(v.begin(), v.end(), 3);
if (it != v.end()) {
cout << "Found 3 at position " << distance(v.begin(), it) << endl;
} else {
cout << "3 not found" << endl;
}
```
如果要查找其中是否有元素大于5,可以使用find_if:
```
auto it = find_if(v.begin(), v.end(), [](int x) { return x > 5; });
if (it != v.end()) {
cout << "Found element greater than 5 at position " << distance(v.begin(), it) << endl;
} else {
cout << "No element greater than 5 found" << endl;
}
```
注意,这里使用了lambda表达式作为谓词,用于判断元素是否大于5。
阅读全文