for_each
などのSTLアルゴリズムを複数の引数に適用できるように、mem_fun
およびbind1st
などのような記述が可能ですか?もちろん、1つの引数を除いてすべてが与えられ、それ以外の引数はコンテナ要素によって埋められます。複数の引数にfor_eachなどのSTLアルゴリズムを適用
誰でもこのような例を挙げてください。
for_each
などのSTLアルゴリズムを複数の引数に適用できるように、mem_fun
およびbind1st
などのような記述が可能ですか?もちろん、1つの引数を除いてすべてが与えられ、それ以外の引数はコンテナ要素によって埋められます。複数の引数にfor_eachなどのSTLアルゴリズムを適用
誰でもこのような例を挙げてください。
あなたが探しているものはstd::bindまたはそのツインboost::bindです。彼らはこのように使用されています
std::vector<int> v = {1,2,3,4};
std::transform(begin(v), end(v), begin(v), std::bind(std::plus<int>(), _1, 23));
ラムダを反復処理するなど、多くの壊れたやり方を見て、私の意見では、非常に明確です。代わりにstd::bind
のラムダとPMRの例:
std::vector<int> v = {1,2,3,4};
std::transform(begin(v), end(v), begin(v), [](int n) { return n + 23 });
ラムダはまた、例えば、かなりより困難バインドや友人としている安心の事態に対処することができます:C++ 11では
std::transform(begin(v), end(v), begin(v), [](int n) { return n * ((double)rand()/RAND_MAX); });
私はここで反復処理の方法をたくさん見つけようとしました:http://stackoverflow.com/a/8378613/105672不思議にも十分な'std :: bind'がありません。 – pmr
を@pmrがこのように投稿した同じことを行うことができます:
std::vector<int> v = {1,2,3,4};
std::transform(begin(v), end(v), begin(v), [](int _1) { return _1 + 23});
これを@pmrの解決策と比較してください。
@ pmrソリューションの_1
は、私の解決策のラムダのパラメータになります。もちろん、より良い名前を使用することができます(実際には、)。私は_1
を使って、どのシンボルが何を意味するのかを比較して理解できるようにしました。
私は参照してください。それはC++ 11のstlにありますか? –
@littleEinstein - 'std :: bind'はC++ 11の一部です。それを使用できない場合は、[boost](http://www.boost.org)から使用できます。 – birryree
std :: bindもC++ 03であり、boost :: bindはboost(これは持っているか取得している)です。 –