STL-foreach算法

for_each算法用于遍历容器中的元素,前提是容器必须要提供迭代器,例如stack容器、queue容器本身不提供迭代器,所以不能使用for_each算法。

for_each的源码(P.J. Plauger版本)实现如下:

template<class _InIt,class _Fn1>inline
void for_each(_InIt _First, _InIt _Last,_Fn1 _Func)
{
    for(; _First != _Last; ++_First)
        _Func(*_First);
}

可看到for_each算法有三个参数,容器开始迭代器,容器结束迭代器,加上一个回调(这里可写函数对象,或者普通函数)。

1. for_each基本用法

//普通函数
void print01(int val){
    cout<< val << " ";
}
//函数对象
struct print001{
    void operator()(int val){
        cout<< val << " ";
    }
};
 
//for_each算法基本用法
void test01(){
   
    vector<int> v;
    for (int i = 0; i < 10;i++){
        v.push_back(i);
    }
 
    //遍历算法
    for_each(v.begin(), v.end(), print01);
    cout<< endl;
 
    for_each(v.begin(), v.end(), print001());
    cout<< endl;
 
}

2. for_each返回值

struct print02{
    print02(){
        mCount= 0;
    }
    void operator()(int val){
        cout<< val << " ";
        mCount++;
    }
    int mCount;
};
 
//for_each返回值
void test02(){
 
    vector<int> v;
    for (int i = 0; i < 10; i++){
        v.push_back(i);
    }
 
    print02 p = for_each(v.begin(), v.end(), print02());
    cout<< endl;
    cout<< p.mCount << endl;
}
 
struct print03 : public binary_function<int, int, void>{
    void operator()(int val,int bindParam) const{
        cout<< val + bindParam << " ";
    }
};

3. 绑定参数输出

//for_each绑定参数输出
void test03(){
   
    vector<int> v;
    for (int i = 0; i < 10; i++){
        v.push_back(i);
    }
 
    for_each(v.begin(), v.end(), bind2nd(print03(),100));
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值