C++ std::for_和boost::zip_迭代器都无法编译

C++ std::for_和boost::zip_迭代器都无法编译,c++,boost,C++,Boost,以下代码无法为我编译: #include <iostream> #include <vector> #include <boost/iterator/zip_iterator.hpp> typedef boost::tuple<int&, float&> EntryTuple; struct zip_func : public std::unary_function<EntryTuple&, void>

以下代码无法为我编译:

#include <iostream>
#include <vector>

#include <boost/iterator/zip_iterator.hpp>

typedef boost::tuple<int&, float&> EntryTuple;

struct zip_func :
  public std::unary_function<EntryTuple&, void>
{
  void operator()(EntryTuple& t) const
  {
    std::cout << t.get<0>() << " " <<  t.get<1>() << std::endl;
  }
};


int main()
{

const int N = 5;
std::vector<int> intVec(N,2);
std::vector<float> valueVec(N,5.5);

std::for_each(
boost::make_zip_iterator(
  boost::make_tuple(intVec.begin(), valueVec.begin())
  ),
boost::make_zip_iterator(
  boost::make_tuple(intVec.end(), valueVec.end())
  ),
zip_func()
);

return 0;
}
原因是什么?

/usr/local/include/c++/5.1.0/bits/stl_algo.h:3767:5:错误:无效 “EntryTuple&{aka”类型的非常量引用的初始化 boost::tuples::tuple&}来自类型为的右值 '入口元组{aka boost::tuples::tuple}'

因此,
const
对于运算符的参数是必需的:

typedef boost::tuple<int&, float&> EntryTuple;

struct zip_func :
  public std::unary_function<const EntryTuple&, void>
{
  void operator()(const EntryTuple& t) const
  {
    t.get<0>() = 10;
    std::cout << t.get<0>() << " " <<  t.get<1>() << std::endl;
  }
};
typedef boost::tuple EntryTuple;
结构压缩函数:
公共标准::一元函数
{
void运算符()(const EntryTuple&t)const
{
t、 get()=10;

std::cout Boost的zip迭代器是一个只查看的迭代器?顺便说一句,
std::一元函数
非常适合C++03。
typedef boost::tuple<int&, float&> EntryTuple;

struct zip_func :
  public std::unary_function<const EntryTuple&, void>
{
  void operator()(const EntryTuple& t) const
  {
    t.get<0>() = 10;
    std::cout << t.get<0>() << " " <<  t.get<1>() << std::endl;
  }
};