我想计算双打向量的平方和平方根。例如:
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 函数(如 transform)执行上述操作的方法?也许有一个内置的 sqrt 函数作用于数组?
答案与your previous question相同...
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);
((double(*)(double))
强制转换是强制sqrt
函数使用double
变体-这是一个重载函数。您可以使用std::ptr_fun<double, double>(sqrt)
来避免转换。)
我认为第二个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's answer可以调整一点:
std::transform(Array1.begin(), Array1.end(), Array1.begin(), [](double f)->double { return f * f; });
或者,如果您使用的是 Boost,则可以使用 Boost::lambda:
#include <boost/lambda.hpp>
using namespace boost::lambda;
std::transform(Array1.begin(), Array1.end(), Array1.begin(), _1 * _1);
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(61条)