如何使用除法和for_each?

How to use divides and for_each?

我有:

vector<double> ved1 = { 1,2,3,4,5,6,7,8,9,10 };
vector<double> ved2 = { 11,12,13,14,15,16,17,18,19,20 };
vector<double> ved3(10);

我想有ved3=ved3/2但是我不能正确得到它,结果是2/ved3; 如何使用除法?

transform(ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), plus<double>());
transform(ved3.begin(), ved3.end(), ved3.begin(), bind1st(divides<double>(),2));`    

我想要cos(ved2),但是我买不到。我的代码有什么问题?

double cos_1(double x) { return cos(x); }
for_each(ved2.begin(), ved2.end(), cos_1);

bind1st 会将 2 绑定到 divides 的第一个参数,然后 transform 会将 ved3 的每个元素提供给 divides 作为第二个参数。所以结果将是 divides(2, ved3[0])divides(2, ved3[1]) 等等。

如果要计算 divides(ved3[...], 2),请使用 bind2nd(divides<double>(), 2)。这样,2 将绑定到第二个参数,第一个参数留空 transform

如何使用std::for_each逐元素应用余弦

std::for_each 不填充一些输出;或者必须更改输入 container/range。它只是将可调用对象应用于范围的每个元素。如果函数没有 "side effects" - 那么 for_each 将毫无用处。具体来说,在你的情况下 - 你正在计算每个值的余弦,但没有对它做任何事情。

如果您想就地更改值,您需要专门这样做:

void apply_cos(double& x) { x = std::cos(x); }

// ...

for_each(ved2.begin(), ved2.end(), apply_cos);

或使用 lambda 表达式:

for_each(ved2.begin(), ved2.end(), [](double& x) { x = cos(x); });

注意使用 reference 函数输入而不是 valuedouble& x,而不是 double x.这意味着当您在 apply_cos() 中更改 x 时,输入范围内的值 std::for_each 会发生变化。