[C++]高效定义STL比较函数的一些建议

本文介绍了在C++中高效定义STL比较函数的建议,包括使用mem_fun, ptr_fun, mem_fun_ref适配成员函数,使函数子可配接,遵循按值传递原则以及确保判别式为纯函数。详细讨论了函数对象的设计和STL的使用惯例。" 137761911,10788302,CSS实现惊艳弧形背景,"['CSS', '前端', 'Web开发', '技术教程', '资源分享']
摘要由CSDN通过智能技术生成

函数与函数子

在STL的使用中,我们经常需要自定义比较函数。本文将介绍如何完成这一类的函数,并且给出可靠而高效的使用建议。

1. mem_fun, ptr_fun, mem_fun_ref

mem_fun, ptr_fun, mem_fun_ref主要的任务是为了掩盖C++语言中一个内在的语法不一致的问题。

调用一个函数,C++提供了三种方法。

f(x); //  语法1:非成员函数的调用。
x.f(); // 语法2:成员函数的调用。
p->f(); // 语法3:指针调用成员函数。

对于语法1:

#include <iostream>
#include <vector>
using namespace std;
class Widget {
public:
};
void test(const Widget& one) {
    cout << "test fine!" << endl;
}
int main() {
    vector<Widget> vw;
    for_each(vw.begin(), vw.end(), ptr_fun(test));  //  这里是不是用ptr_fun都没有问题。
    return 0;
}

对于语法2:上面的写法就不再合适了,后文给出相应解释。正确的做法如下,调用mem_fun_ref。

#include <iostream>
#include <vector>
using namespace std;
class Widget {
public:
    void test() {
        cout << "test fine!" << endl;
    }
};
int main() {
    vector<Widget> vw;
    for_each(vw.begin(), vw.end(), mem_fun_ref(&Widget::test));
    return 0;
}

对于语法3:

#include <iostream>
#include <vector>
using namespace std;
class Widget {
public:
    void test() {
        cout << "test fine!" << endl;
    }
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值