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;
}
};