STL函数对象之自定义函数对象

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
如何定义自己的函数对象,它使用于任何的绑定器
要定义自己的绑定器要满足一定的条件:必须提供参数和返回值的类型。
STL为我们提供了两个结构体:
template <class Arg, class Result>
struct unary_function {
typedef Arg argument_type;
typedef Result result_type;
};
template <class Argl, class Arg2, class Result>
struct binary_function {
typedef Argl first_argument_type;
typedef Arg2 second_argument_type;
typedef Result result_type;
};


一个例子:
template <class T1, class T2>
struct fopow : public std::binary_function<T1, T2, T1>
{
T1 operator() (T1 base, T2 exp) const {
return std::pow(base,exp);
}
};

for (int i=1; i<=9; ++i) {
coll.push_back(i);
}
transform (coll.begin(), coll.end(), //source
ostream_iterator<int>(cout," "), //destination
bind1st(fopow<float ,int>() ,3)); //operation
cout << endl;
output:
3 9 27 81 243 729 2187 6561 19683.

在我们自定以函数对象时也不必非要继承那两个结构体,在自己类指定相关类型也可以。
STL函数对象:A深入浅出的介绍 其中一个关键的组件就是函数对象,它是一种类,用于在STL算法中实现某些操作。在上面的示例中,我们定义了一个名为IsOdd的函数对象,它实现了一个operator()成员函数,用于确定给定数字是否为奇数。在main函数中,我们使用find_if算法和IsOdd函数对象来查找容器中的第一个奇数。希望本文能够帮助您理解STL函数对象的概念,以及如何在自己的代码中使用它们。可以通过定义一个类来创建函数对象,该类必须包含一个operator()成员函数,该成员函数在算法中被调用。如何在STL算法中使用函数对象 阅读详情

相关推荐

C++编程与STL应用:从搜索到自定义函数对象

本文探讨了C++标准模板库(STL)中的搜索技术及其在实际编程中的应用。通过具体案例,文章详细介绍了如何在使用STL容器时声明比较运算符,如何利用STL的find()函数在列表中搜索特定姓名和电话号码,以及如何通过编写自定义函数对象来控制算法的行为。文章还深入讨论了函数对象的使用,包括预定义的STL函数对象和如何创建自己的函数对象,以适应特定的排序和操作需求。

weixin_42571280的博客 186

STL自定义仿函数和组合型函数适配器

1.自定义仿函数 STL提供了算术类、相对关系类、逻辑运算类的预定义仿函数,但为了满足程序的需要,大多数情况下需要我们自己定义仿函数。如果希望它们能够和函数适配器搭配使用,就必须满足某种条件:必须提供一些类型成员来反映其参数和返回值的类别。 STL提供了以下两种结构:

ww32cc的博客 714

C++ STL中数据搜索与函数对象的应用

本文深入探讨了C++标准模板库(STL)中的数据搜索技术与函数对象的应用。通过分析查找具有指定姓名和电话号码的人员的示例程序,我们理解了如何使用find()函数在list中搜索,并通过迭代和多次调用find()来处理多个匹配项。同时,文章详细介绍了STL预定义的函数对象,并展示了如何编写自定义函数对象来实现特定的排序和操作,为STL算法提供了更大的灵活性。

weixin_28949937的博客 402

STL自定义函数

还是不太懂原理,但是sort的自定义比较函数大概是明白了 我认为吧void com(int a, int b){ return a > b; }sort默认是升学的,从小到大排序 这个函数使sort把a > b看做 a < b 根据sort的默认排序规则a会排在b前面 这时候就是一个降序数组

Zolrk的博客 475

STL--函数对象(学习)

使用函数内建对象,需要引入头文件#include<functiona>函数对象使用重载时,行为类似于函数调用,也称为仿函数。用法:这些仿函数产生的对象,用法和普通函数一样,重载函数调用操作符的类,其对象常称为函数对象函数对象(仿函数)是一个类,不是一个函数。概念:STL内建了一些函数对象。分类:1.算数仿函数

weixin_44273624的博客 140

【C++ STL学习笔记】C++ STL常用算法

作为一门面向对象的编程语言,使用 C++ 编写程序有一个缺点,即随着代码面向对象程度的提高,其执行效率反而会降低。例如,经实验证明几乎在所有情况下,直接操作一个 double 类型变量的执行效率,要比操作一个含 double 类型成员属性的类对象更高。对于大多数读者来说,以上所说是很容易想通的,因为它符合我们对高级编程语言的认知。但本节要介绍的内容,一定程序上会打破这个认知。

2401_84263282的博客 614

STL --- 五. 函数对象 Function Objects

介绍函数对象的含义,作用,以及std 算法和函数对象区别

bigger_belief的博客 1276

10 STL关联式容器自定义排序规则【函数对象】【常用排序规则】

文章目录0 - 前言1 - 使用函数对象1 - 1 什么是函数对象1 - 2 STL中的函数对象类模板1 - 3 使用函数对象规定容器排序规则2 - 重载关系运算符实现自定义排序 0 - 前言 参考:C++ STL关联式容器自定义排序规则(2种方法) 总的来说,为关联式容器自定义排序规则,有以下 2 种方法。 1 - 使用函数对象 无论关联式容器中存储的是基础类型(如 int、double、float 等)数据,还是自定义的结构体变量或类对象(包括 string 类),都可以使用函数对象的方式为该容器自

日月既往,不可复追 1018

STL 的 std::set 创建自定义结构体的对象,定义严格弱序的比较函数

**简 述:** 对于 `STL` 中 `std::set` 创建自定义结构体的对象,发现使用 **"函数对象"** 和 **"定义普通函数 + decltype"** 两种方式会有差异,且其中一种书写容易崩溃,探究一番后,值得记录一下。

1270

通过函数对象(伪函数)实现STL中set容器的自定义排序方式

介绍了c++STL中set容器的排序函数对象的使用方法及原理

2303_79230750的博客 1647

第4章:标准模板库 (STL) 初探4.4 函数对象:定义和使用自定义函数对象、lambda表达式

在C++中,函数对象(Function Object)是指可以像函数一样调用的对象。它们通常用于STL算法中,作为参数传递给算法来执行特定的操作,如比较、计算等。函数对象不仅限于普通的函数指针,还可以是类的实例,只要该类重载了operator()。此外,C++11引入了lambda表达式,提供了一种更简洁的方式定义匿名函数对象。定义一个类并重载operator()创建一个类,并在类中重载operator(),使其可以像函数一样被调用。可以在类中定义成员变量,用于存储状态信息。使用函数指针。

xiaoheshang_123的博客 1072

C++STL中队列的 swap 函数实现及自定义类型对象的交换方式

综上所述,队列 swap 函数实现的核心代码就是交换两个队列的容器。交换容器时,只需要将两个容器的指针交换即可,时间复杂度为 O(1)。如果队列中存储的是自定义类型的对象或指针,那么在进行队列的元素交换时,需要注意到STL中的。注意:在交换队列元素时,如果队列中存储的是自定义类型的对象或指针,需要自行实现。队列是基于容器实现的,因此在交换两个队列时,需要交换它们的底层容器。此外,如果存储的是指针类型,也需要实现自定义类型的。函数进行队列元素交换时,直接调用自定义的。进行交换,实际上交换了两个队列的容器。

曾续缘的博客 1330

中国大学MOOC程序设计与算法(三):C++ 面向对象程序设计 第八周 标准模板库STL(一) 笔记 之 函数对象

第八周 标准模板库STL(一) 1.string类 2.标准模板库STL概述(一) 3.标准模板库STL概述(二) 4.vector,deque和list 5.函数对象 5.函数对象 函数对象 如果一个类重载了运算符“()”,则该类的对象就都是函数对象函数对象也是对象,但是用起来看上去和函数非常像,实际上是执行了成员函数的调用。 class CMyAverage { public: d...

weixin_41919587的博客 381

C++ 标准模板库 STL 函数对象

函数对象 函数对象的基本概念 函数对象:如果一个类重载了运算符(),及重载了括号运算符的类,其产生的对象都将成为函数对象函数对象是个对象,但是用起来看上去像函数调用,实际上也执行了函数调用。 // 函数对象类 class CMyAverage{ public: double operator() (int a, int b, int c){ return (double)(a+b+c)/3; } }; int main(){ CMyAverage average;

王清欢的博客 2994

C++ 内建函数对象

STL内建了一些函数对象。分为:算数类函数对象,关系运算类函数对象,逻辑运算类仿函数。这些仿函数所产生的对象,用法和一般函数完全相同,当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象,需要引入头文件 functional #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; //...

weixin_43903378的博客 280

STL函数对象

STL当中如果元素,或者说

dasgk的专栏 643

STL 学习笔记 之 函数对象

C++ STL,三大核心组件:Containers, Iterators以及Algorithms,即容器,迭代器和算法。另外还一种重要组件,即函数对象(FunctionObject r)。函数对象又称为仿函数(functor)。函数对象其实就是一个行为类似函数的“东西”,它可以没有参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态。 在C++程序设计中,任何普通函数和任何重载了函数

moonboat0331的专栏 657
上一篇: STL函数对象之预定义函数对象和函数对象绑定器
下一篇: Window下开发环境安装和Hello World
FlowShell
博客等级 码龄17年 119粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值