【问题标题】:How to use for_each from C++ boost library?如何使用 C++ boost 库中的 for_each?
【发布时间】:2013-03-20 15:34:54
【问题描述】:

我尝试使用 C++ boost 库中的for_each。这是我的代码。

#include <iostream>
#include <vector>

#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/include/for_each.hpp>

using namespace std;

int main() {

        vector<int> vec;
        vec.push_back(1);
        vec.push_back(2);
        vec.push_back(3);

         boost::for_each(
                vec,
                [](int val){
                        cout << val << "\n";
                }
        );

        return 0;
}

这就是我编译代码的方式:

g++ -std=c++0x -I /opt/software/boost/1.50_ubuntu12.4lts_gcc4.7.2/include -c try_boost.cpp
g++ -o try_boost -L/opt/software/boost/1.50_ubuntu12.4lts_gcc4.7.2/lib try_boost.o -lboost

结果我得到:

error: ‘for_each’ is not a member of ‘boost’

有人知道为什么它不起作用吗?

【问题讨论】:

  • 试试boost::fusion::for_each。我不使用它,所以我不确定。
  • @chris:那也行不通。
  • 您使用的这个for_each 不适用于std::vector。这适用于 Fusion Library 中的类似元组的 boost::vector。
  • (Nawaz 提到的问题的可能解决方案:改用std::for_each(vec.begin(), vec.end(), [](...){...})。)
  • 另外,你为什么不用std::for_each

标签: c++ boost compilation foreach


【解决方案1】:

您正在使用来自 Boost.Fusion 库的 for_each。这不适用于std::vector

您需要的 for_each 来自 Boost.Range 库。

#include <boost/range/algorithm/for_each.hpp> //note this difference!

boost::for_each(vec, your-lambda-expression);

它在boost::range 命名空间内定义,使用using 声明性将其引入boost 命名空间。所以你也可以这样写:

boost::range::for_each(vec, your-lambda-expression);

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 2014-04-01
    • 2011-03-02
    • 1970-01-01
    • 2011-04-27
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多