C++STL functor

仿函数

Unary_function用来呈现一元函数的参数类型和返回值类型,其定义非常简单:

STL规定,每一个Adaptable Unary Function都应该继承此类别

Template <class Arg, class Result>

Struct unary_function{

    Typedef Arg argument_type;

    Typedef Result result_type;

};

一旦某个仿函数继承了unary_function,其用户便可以这样取得该仿函数的参数类型,并以相同手法取得其返回类型:

Template <class T>

Struct negate:public unary_function<T, T>{

    T operator()(const T& x) const { return –x;}

};

Binary_function用来呈现二元函数的第一参数类型,第二参数类型,以及返回值类型,其定义非常简答:

STL规定,每一个Adaptable Binary Function都应该继承此类型

Template <c;ass Arg1, class Arg2, class Result>

Struct binary_function{

    Typedef Arg1 first_argument_type;

    Typedef Arg2 second_argument_type;

    Typedef Result result_type;

};

一旦某个仿函数继承了binary_function,其用户便可以这样取得该仿函数的各种相应类型

Template<class T>

Struct plus : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x + y; }

};

算数类仿函数

加法

Template<class T>

Struct plus : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x + y; }

};

减法

Template<class T>

Struct minus : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x - y; }

};

乘法

Template<class T>

Struct multiplies : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x * y; }

};

除法

Template<class T>

Struct divides : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x / y; }

};

模取

Template<class T>

Struct modulus : public binary_function<T, T, T>{

    T operator() (const T& x, const T& y) const { return x % y; }

};

否定

Template<class T>

Struct negate : public binary_function<T, T>{

    T operator() (const T& x) const { return -x; }

};

使用1

//生成仿函数实体

Plus<int> plusObj;

//使用上述对象

plusObj(3, 5)

使用2

直接以仿函数的临时对象履行函数功能

//function<T>()是一个临时对象,后面再接一对小括号

Plus<int>()(3, 5)

使用3

主要用途,搭配STL算法

Accumulate(iv.begin(), iv.end(), 1, multiplies<int>());

关系运算类仿函数

等于

Template<class T>

Struct equal_to : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x == y; }

};

不等于

Template<class T>

Struct not_equal_to : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x != y; }

};

大于

Template<class T>

Struct greater : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x > y; }

};

大于或等于

Template<class T>

Struct greater_equal : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x >= y; }

};

小于

Template<class T>

Struct less : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x < y; }

};

小于或等于

Template<class T>

Struct less_equal : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x <= y; }

};

使用1

Equal_to<int> equal_to_obj;

equal_to_obj(3, 5);

equal_to<int>()(3, 5);

使用2

Sort(iv.begin(), iv.end(), gerater<int>());

逻辑运算类仿函数

逻辑运算And

Template<class T>

Struct logical_and : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x && y}

};

逻辑运算Or

Template<class T>

Struct logical_or : public binary_function<T, T, bool>{

    T operator() (const T& x, const T& y) const { return x || y}

};

逻辑运算Not

Template<class T>

Struct logical_not : public binary_function<T, bool>{

    T operator() (const T& x) const { return !x; }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL(标准模板库)是C++标准库的一部分,包含许多容器类、算法和迭代器等模板实现。STL思维导图提供了一个更直观、系统化的理解STL的方式。 STL思维导图展示了STL的主要组成部分。首先是容器类,包括序列容器(如vector、list、deque)和关联容器(如set、map、unordered_set、unordered_map)。序列容器提供了顺序存储元素的能力,关联容器则使用一种基于键值的方式存储和访问元素。每种容器类都有自己特定的一些操作和特性。 其次是迭代器,它是STL的重要概念。迭代器是一个抽象的指针,用于遍历容器内的元素。迭代器提供了一种统一的访问容器元素的方式,使得算法可以独立于具体容器实现。STL提供了多种迭代器,包括输入迭代器、输出迭代器、正向迭代器、双向迭代器和随机访问迭代器等,每种迭代器都有自己的一些功能和限制。 再次是算法,STL提供了丰富的算法库,包括排序、查找、复制、替换、合并等常用操作。这些算法可以直接应用于不同类型的容器,方便了程序员的开发。通过调用STL的算法,可以实现很多常见的操作,减少了开发的工作量。 最后是函数对象(Functor)和适配器(Adapter)。函数对象是一种功能类似函数的对象,可以用作STL算法的参数,非常灵活。适配器是一种能够将函数对象适配到STL算法的机制,可以改变函数对象的行为,满足不同的需求。 STL思维导图可以帮助我们更好地理解STL的组成和使用方式,从而更高效地利用STL进行C++编程。对于需要使用STL的开发者来说,学习和掌握STL思维导图是非常有益的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值