我最近遇到了这种用法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错了。我的错误是什么?