/*
*Copyright(c) 2016.烟台大学计算机与控制工程学院
*ALL rights reserved.
*文件名称:test.cpp
*作者:杨驰
*完成日期:2016年6月5
*问题描述:阅读下面的程序
*/
#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
class myAdd: public binary_function<int,int,int>
{
public:
int operator()(int a, int b) const
{
return a+b;
}
};
int main()
{
int a[5]= {1,2,3,4,5};
vector<int> my(5);
transform(a,a+5,my.begin(), bind2nd(myAdd(), 4));
copy(my.begin(), my.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
transform(a,a+5,a,my.begin(), myAdd());
copy(my.begin(), my.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
return 0;
}
运行结果:
知识总结:
STL 标准库中的函数适配器辅助说明、
适配器辅助函数 功能说明
bind1st 通过绑定第一个参数,使二元的函数对象转化为一元的函数对象
bind2nd 通过绑定第二个参数,使二元的函数对象转化为一元的函数对象
not1 对一元的函数对象取反
not2 对二元的函数对象取反
使用的方式:
bind1st( less<int>(), 10)(20);
not2( less<int() )(10,20);