私は最近、この使用法に遭遇しましたfor_each
:
std::for_each(ts.begin(), ts.end(), [=](T& t){t *= f;});
まあ、それは動作します。Ts と T f のコンテナーの場合、これは各値を f で乗算します。ただし、ここでラムダを使用するのは嫌いです。短いですが、重複しているだけのようですstd::multiplies
。また、変更の意図を表すには、for_each
ではなく、しかし、とすべきです。transform
ただし、std::multiplies
二項述語でstd::transform
あり、単項述語が必要です。
f を 1 つのパラメーターとしてバインドしようとしましたが、どうやら使い方が間違っているようです。
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
間違っているのではないかと疑っています。私の間違いは何ですか?