web-dev-qa-db-ja.com

STLを使用してベクトル要素にスカラー値を乗算する

こんにちは、スカラー値でベクトルを(乗算、追加など)したいmyv1 * 3、forloopで関数を実行できることは知っていますが、STL関数を使用してこれを行う方法はありますか? {Algorithm.h ::変換関数}のようなものですか?

34
Ismail Marmoush

はい、_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> 
_
82

valarrayの代わりにvectorを使用できる場合、スカラー乗算を実行するための組み込み演算子があります。

v *= 3;

vectorを使用する必要がある場合、実際にtransformを使用してジョブを実行できます。

transform(v.begin(), v.end(), v.begin(), _1 * 3);

(あなたが Boost.Lambda に似たものを持っていると仮定すると、_1 * 3 :-P)

23

あなたの質問に対する最新のC++ソリューション。

std::vector<double> myarray;
double myconstant{3.3};
std::transform(myarray.begin(), myarray.end(), myarray.begin(), [myconstant](auto& c){return c*myconstant;});
6
Spandy