遇到 'for_each' is not a member of 'std' 的问题

       今天学Boost库时候用到 标准库的 for_each , 但是编译总是出错,提示:

        error: 'for_each' is not a member of 'std' 或者  for_each was not declared in this scope

   这是因为缺少头文件 #include <algorithm>,还有不要忘记using namespace std; 或者用std::for_each。

   在http://ubuntuforums.org/showthread.php?t=965086的4楼找到的答案。


顺便提一下for_each用法和boost::bind调用成员函数的优点:

#include <iostream>
#include <boost/bind.hpp>
#include <vector>
#include <algorithm>
class status
{
    std::string name_;
    bool ok_;
public:
    status(const std::string& name):name_(name),ok_(true) {}
    void break_it()
    {
        ok_=false;
    }
    bool is_broken() const
    {
        return ok_;
    }
    void report() const
    {
        std::cout << name_ << " is " <<
                  (ok_ ? "working nominally":"terribly broken") << '\n';
    }
};
int main(int argc, char** argv)
{
    std::vector<status>
  
  
   
    statuses;
    statuses.push_back(status("status 1"));
    statuses.push_back(status("status 2"));
    statuses.push_back(status("status 3"));
    statuses.push_back(status("status 4"));
    statuses[1].break_it();
    statuses[2].break_it();
    std::for_each(
        statuses.begin(),
        statuses.end(),
    /// std::mem_fun_ref(&status::report)
        boost::bind(&status::report, _1)
                  );
    return 0;
}    

  
  

    这样就逐一调用了vector型statuses中每个status类的report成员函数,也许

这和用std::mem_fun_ref没有什么区别,但是当你改用指针时候就不同了,需要用

std::mem_fum而不是mem_fum_ref:

    std::vector
  
  
   
    statuses;
    statuses.push_back(new status("status 1"));
    statuses.push_back(new status("status 2"));
    statuses.push_back(new status("status 3"));
    statuses.push_back(new status("status 4"));
    statuses[1]->break_it();
    statuses[2]->break_it();
    std::for_each(  
      p_statuses.begin(), 
      p_statuses.end(), 
///   std::mem_fun(&status::report)
      boost::bind(&status::reprot, _1)
    );
  
  
    但是如果用boost::bind就不必担心这些了,语法是不变的。


注:代码源自《Beyond the C++ Standard Library: An Introduction to Boost》Library9.


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值