C ++でのベクトル二重倍のスクエアルートとスクエア
-
18-09-2020 - |
質問
ダブルのベクトルの正方形と正方形の根を計算したいのですが。たとえば、
vector<double> Array1(10,2.0);
vector<double> Array2(10,2.0);
for(unsigned int i=0; i<Array1.size(); i++)
Array1[i] = sqrt(Array1[i]);
for(unsigned int i=0; i<Array2.size(); i++)
Array2[i] = Array2[i] * Array2[i];
.
変換などのSTL関数を使用して上記の方法がありますか?おそらく 配列に作用する内蔵のSQRT関数がありますか?
解決
...
static inline double computeSquare (double x) { return x*x; }
...
std::transform(Array1.begin(), Array1.end(), Array1.begin(), (double(*)(double)) sqrt);
std::transform(Array2.begin(), Array2.end(), Array2.begin(), computeSquare);
.
他のヒント
i 考える 2番目のtransform
を簡素化することができます、私はあまりわかりません。
#include <algorithm>
using namespace std;
vector<double> Array1(10,2.0);
vector<double> Array2(10,2.0);
transform( Array1.begin(), Array1.end(), Array1.begin(), sqrt );
transform( Array2.begin(), Array2.end(), Array2.begin(), Array2.begin(), multiplies<double>() );
. コンパイラにC ++ 0xのサポートがある場合は、 Kennytmの答えは少し微調整することができます:
std::transform(Array1.begin(), Array1.end(), Array1.begin(), [](double f)->double { return f * f; });
.
またはブーストを使用している場合は、Boost :: Lambda:
を使用できます。#include <boost/lambda.hpp>
using namespace boost::lambda;
std::transform(Array1.begin(), Array1.end(), Array1.begin(), _1 * _1);
. 所属していません StackOverflow