STL之bind2st for_each 和 transform

由一个问题开始吧:

void print(int& a,const int b) { a+=b; } int main() { list<int> my_list; ......... for_each(my_list.begin(),my_list.end(), bind2nd(print,3) ); } 目的是依次循环,每个节点加3 想通过bind2nd使函数的第二个值绑定为3 可是通过不了,这是错在哪 如果要达到目的的话,应该怎么改呢??

后来一调试,发现不是那么容易。你能发现问题在哪儿吗?

后来看了帮助文档才解决,看看我的答复:

  • for_each 是需要使用functor , bind2st 的对象也是functor 而不是函数。
  • 如果需要使用bind2st,那么你需要从binary_function继承.
  • for_each不会让你修改元素, 因此你的要求是达不到的。STL编程手册中就有说明: for_each的 “UnaryFunction does not apply any non-constant operation through its argument”
  • 如果要达到要求,你可以使用transform. 以下代码就是一个例子: struct printx: public binary_function<int, int, int> {   int operator()(int a, int b)const   {      cout<<a+b<<endl;     return a+b;   } }; int main() {     vector<int> my;     my.push_back(0);     my.push_back(1);     my.push_back(2);     copy(my.begin(), my.end(), ostream_iterator<int>(cout, " "));     cout<<"/n-----"<<endl;     for_each(my.begin(),my.end(), bind2nd(printx() , 3) );     cout<<"/n-----"<<endl;     copy(my.begin(), my.end(), ostream_iterator<int>(cout, " "));     cout<<"/n-----"<<endl;     transform(my.begin(),my.end(),my.begin(), bind2nd(printx() , 3) );     cout<<"/n-----"<<endl;     copy(my.begin(), my.end(), ostream_iterator<int>(cout, " "));     return 0; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值