我正在尝试编写一个二进制函数,该函数采用两个向量(长度相同)并将它们按值相加。由于某种原因,以下代码不起作用:
struct Plusval : binary_function <std::vector<int>,std::vector<int>,std::vector<int> >
{
std::vector<int> operator() (const std::vector<int>& x, const std::vector<int>& y) const
{
std::vector<int> ret(x);
std::vector<int>::iterator itx,ity;
ity=y.begin();
for (itx=ret.begin();itx<ret.end();++itx)
{
ret[*itx]+=y[*ity];
++ity;
}
return ret;
}
};
我收到一个错误,我无法执行 ity=y.begin() 但是,以下代码确实有效
struct Plusval : binary_function <std::vector<int>,std::vector<int>,std::vector<int> >
{
std::vector<int> operator() (const std::vector<int>& x, const std::vector<int>& y) const
{
std::vector<int> ret(x);
std::vector<int> yloc(y);
std::vector<int>::iterator itx,ity;
ity=yloc.begin();
for (itx=ret.begin();itx<ret.end();++itx)
{
ret[*itx]+=yloc[*ity];
++ity;
}
return ret;
}
};
显然,第二个版本需要更长的时间(因为它必须复制一个额外的向量)。是因为输入是一个常量向量吗?如果是,有什么理由需要吗?请注意,我计划将此函数用作 boost::mpi 中 allreduce() 函数的输入,如果这有什么不同的话