(同じ長さの) 2 つのベクトルを取り、それらを値で加算するバイナリ関数を作成しようとしています。何らかの理由で、次のコードは機能しません。
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;
}
};
明らかに、2 番目のバージョンは時間がかかります (追加のベクターをコピーする必要があるため)。入力が定数ベクトルだからですか?もしそうなら、それが必要な理由はありますか?この関数を boost::mpi の allreduce() 関数への入力として使用することを計画していることに注意してください。