如何用STL自带functor实现四则运算?
想要写一个functor,实现
return A + B * (*i);
比如
extern int A,B;
vector<int> v;
...
transform(v.begin(), v.end(), ostream_iterator<int>(cout, " "), ????);
希望能针对每个数组的元素,输出 A+B*(*i);
STL functor?组合
[解决办法]
struct my_operation
{
my_operation(int A, int B)
: A(_A), B(_B)
{}
int operator()(int n)
{
return A + B * n;
}
int A, B;
}
transform(v.begin(), v.end(), ostream_iterator<int>(cout, " "), my_operation(A, B);
template<class _Fn1, class _Fn2>
class unary_compose
: public unary_function<typename _Fn2::argument_type,
typename _Fn1::result_type>
{// functor adapter _Func(stored, right)
public:
typedef unary_function<typename _Fn2::argument_type,
typename _Fn1::result_type> _Base;
typedef typename _Base::argument_type argument_type;
typedef typename _Base::result_type result_type;
unary_compose(const _Fn1& _Func1,
const _Fn2& _Func2)
: op1(_Func1), op2(_Func2)
{// construct from functor and left operand
}
result_type operator()(const argument_type& _Value) const
{// apply functor to operands
return (op1(op2(_Value)));
}
result_type operator()(argument_type& _Value) const
{// apply functor to operands
return (op1(op2(_Value)));
}
protected:
_Fn1 op1;// the functor to apply
_Fn2 op2;// the functor to apply
};
template<class _Fn1,
class _Fn2> inline
unary_compose<_Fn1, _Fn2> compose1(const _Fn1& _Func1, const _Fn2& _Func2)
{// return a unary_compose functor adapter
return (unary_compose<_Fn1, _Fn2>(_Func1, _Func2));
}
using namespace std;
void test()
{
vector<int> v(10);
int i = 1;
for (auto& x : v)
x = i++;
int A = 1, B = 2;
// A+B*(*i)
transform(v.begin(), v.end(), ostream_iterator<int>(cout, " "), compose1(bind1st(plus<int>(), A), bind1st(multiplies<int>(), B)));
cout << endl;
transform(v.begin(), v.end(), ostream_iterator<int>(cout, " "), [&](int x){ return A+B*x;});
}