如何使用除法和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 函数输入而不是 value:double& x
,而不是 double x
.这意味着当您在 apply_cos()
中更改 x
时,输入范围内的值 std::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 函数输入而不是 value:double& x
,而不是 double x
.这意味着当您在 apply_cos()
中更改 x
时,输入范围内的值 std::for_each
会发生变化。