c++ptr_fun函数
时间: 2024-04-24 21:25:59 浏览: 205
`std::ptr_fun`是C++标准库中的一个函数模板,位于头文件`<functional>`中。它可以将普通函数指针或函数对象转换为函数适配器,以便在算法中使用。
`std::ptr_fun`的定义如下:
```cpp
template <typename Arg, typename Result>
std::pointer_to_unary_function<Arg, Result> ptr_fun(Result (*f)(Arg));
```
参数`f`是一个普通函数指针,它指向一个接受类型为`Arg`的参数并返回类型为`Result`的函数。
`std::ptr_fun`函数模板返回一个`std::pointer_to_unary_function`类型的函数适配器对象,该对象可以将其参数应用于传入的函数指针。
以下是一个简单的示例,展示了如何使用`std::ptr_fun`将普通函数指针转换为函数适配器,并在算法中使用它:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
// 普通函数
bool isEven(int num) {
return num % 2 == 0;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 将普通函数指针转换为函数适配器
std::function<bool(int)> isEvenAdapter = std::ptr_fun<int, bool>(isEven);
// 使用函数适配器进行判断
auto it = std::find_if(numbers.begin(), numbers.end(), isEvenAdapter);
if (it != numbers.end()) {
std::cout << "找到了第一个偶数:" << *it << std::endl;
} else {
std::cout << "未找到偶数" << std::endl;
}
return 0;
}
```
输出结果:
```
找到了第一个偶数:2
```
在上面的示例中,我们定义了一个名为`isEven`的普通函数,用于判断一个整数是否为偶数。然后,我们使用`std::ptr_fun`将普通函数指针`isEven`转换为函数适配器`isEvenAdapter`。最后,我们使用函数适配器`isEvenAdapter`在容器`numbers`中查找第一个满足条件的元素。最终找到了第一个偶数2并输出。
需要注意的是,C++11之后,可以直接使用lambda表达式或者函数对象代替`std::ptr_fun`来实现相同的功能,更加简洁方便。
阅读全文