我最近遇到了这种用法for_each
:
std::for_each(ts.begin(), ts.end(), [=](T& t){t *= f;});
嗯,它有效。对于 Ts 和 T f 的容器,这会将每个值乘以 f。但是我不喜欢在这里使用 lambda。它很短,但在我看来,它只重复了std::multiplies
. 此外,它不应该是for_each
, buttransform
来表达修改的意图。
但是,std::multiplies
是二元谓词,std::transform
需要一元谓词。
我试图将 f 绑定为一个参数,但显然我用错了:
std::transform(ts.begin(), ts.end(), std::bind(std::multiplies<T>(), f));
GCC 尝试通过错误消息给我一个提示,但我没有看到实际原因:
no matching function for call to ‘transform(std::vector<int>::iterator, std::vector<int>::iterator, std::_Bind_helper<false, std::multiplies<int>, const int&>::type)’
我怀疑我用std::bind
错了。我的错误是什么?