3

有人可以向我解释一下 stl 算法中的 pred 字段是如何准确使用的吗?

谢谢

4

1 回答 1

8

pred代表谓词,它基本上是一个可调用的实体,它可以是一个函数,也可以是一个仿函数(或一个 lambda,它本质上是一个仿函数或函数,具体取决于它是否捕获变量)。所以一个谓词可以接受一个或多个参数,并返回一个布尔值。

这是std::find_if的示例,其中一个重载将一元谓词作为第三个参数。这个谓词是一元的,因为它接受一个参数并返回bool

std::vector<int> v{1,2,3,5,6};
auto it = std::find_if(begin(v), end(v), [](int i) { return i == 3; });

注意第三个参数是一个用作一元谓词的 lambda。

在 C++03 中,示例可以是这样的:

bool is_three(int i) { return i == 3; }

std::vector<int>::iterator it = std::find_if(v.begin(), v.end(), is_three);

请注意,现在is_threewhich 是一个函数作为第三个参数传递给std::find_if.

于 2012-08-25T19:06:00.103 回答