2

私は最近、この使用法に遭遇しました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間違っているのではないかと疑っています。私の間違いは何ですか?

4

1 に答える 1