こんにちは、スカラー値でベクトルを(乗算、追加など)したいmyv1 * 3
、forloopで関数を実行できることは知っていますが、STL関数を使用してこれを行う方法はありますか? {Algorithm.h ::変換関数}のようなものですか?
はい、_std::transform
_を使用:
_std::transform(myv1.begin(), myv1.end(), myv1.begin(),
std::bind(std::multiplies<T>(), std::placeholders::_1, 3));
_
C++ 17より前は、C++ 11で非推奨になったstd::bind1st()
を使用できました。
_std::transform(myv1.begin(), myv1.end(), myv1.begin(),
std::bind1st(std::multiplies<T>(), 3));
_
プレースホルダー用。
_#include <functional>
_
valarray
の代わりにvector
を使用できる場合、スカラー乗算を実行するための組み込み演算子があります。
v *= 3;
vector
を使用する必要がある場合、実際にtransform
を使用してジョブを実行できます。
transform(v.begin(), v.end(), v.begin(), _1 * 3);
(あなたが Boost.Lambda に似たものを持っていると仮定すると、_1 * 3
:-P)
あなたの質問に対する最新のC++ソリューション。
std::vector<double> myarray;
double myconstant{3.3};
std::transform(myarray.begin(), myarray.end(), myarray.begin(), [myconstant](auto& c){return c*myconstant;});