差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
| cplus:stl函数对象 [2025/11/29 11:29] – 创建 张叶安 | cplus:stl函数对象 [2025/11/29 12:42] (当前版本) – [算术仿函数] 张叶安 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | {{ :c_.pdf |}} | + | ====== STL - 函数对象 ====== |
| + | |||
| + | ===== 函数对象 ===== | ||
| + | |||
| + | ==== 函数对象概念 ==== | ||
| + | |||
| + | **概念:** | ||
| + | * 重载**函数调用操作符**的类,其对象常称为**函数对象**。 | ||
| + | * 函数对象使用重载的()时,行为类似函数调用,也叫**仿函数**。 | ||
| + | |||
| + | **本质:** | ||
| + | |||
| + | 函数对象(仿函数)是一个**类**,不是一个函数。 | ||
| + | |||
| + | ==== 函数对象使用 ==== | ||
| + | |||
| + | **特点:** | ||
| + | * 函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值。 | ||
| + | * 函数对象超出普通函数的概念,函数对象可以有自己的**状态**。 | ||
| + | * 函数对象可以作为参数传递。 | ||
| + | |||
| + | ===== 谓词 ===== | ||
| + | |||
| + | ==== 谓词概念 ==== | ||
| + | |||
| + | **概念:** | ||
| + | * 返回**bool类型**的仿函数称为**谓词**。 | ||
| + | * 如果 '' | ||
| + | * 如果 '' | ||
| + | |||
| + | ===== 内建函数对象 ===== | ||
| + | |||
| + | ==== 内建函数对象意义 ==== | ||
| + | |||
| + | **概念:** | ||
| + | * STL内建了一些函数对象。 | ||
| + | |||
| + | **分类:** | ||
| + | * 算术仿函数 | ||
| + | * 关系仿函数 | ||
| + | * 逻辑仿函数 | ||
| + | |||
| + | **用法:** | ||
| + | * 这些仿函数所产生的对象,用法和一般函数完全相同。 | ||
| + | * 使用内建函数对象,需要引入头文件 ''# | ||
| + | |||
| + | ==== 算术仿函数 ==== | ||
| + | |||
| + | **功能描述:** | ||
| + | * 实现四则运算。 | ||
| + | * 其中 '' | ||
| + | |||
| + | **仿函数原型:** | ||
| + | ^ 原型 ^ 说明 ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | **示例:** | ||
| + | <code cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | void test01() | ||
| + | // negate 一元仿函数 取反 | ||
| + | std:: | ||
| + | std::cout << n(50) << std::endl; // 输出 -50 | ||
| + | |||
| + | // plus 二元仿函数 加法 | ||
| + | std:: | ||
| + | std::cout << p(10, 20) << std::endl; // 输出 30 | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | test01(); | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||