我有:
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);
答案 0 :(得分:2)
bind1st
将2
绑定到divides
的第一个参数,然后transform
将ved3
的每个元素提供给divides
作为第二个论点。因此结果将是divides(2, ved3[0])
,divides(2, ved3[1])
,依此类推。
如果您想计算divides(ved3[...], 2)
,请使用bind2nd(divides<double>(), 2)
。这样,2
将被绑定到第二个参数,而第一个参数将transform
保留为空。
答案 1 :(得分:1)
std::for_each
逐元素应用余弦 std::for_each
未填充某些输出;或必须更改输入容器/范围。它只是将可调用对象应用于范围的每个元素。如果该函数没有“副作用”,则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); });
请注意使用对该功能的引用输入而不是值:double& x
,而不是double x
。这意味着,当您在x
中更改apply_cos()
时,输入范围std::for_each
中的值也会更改。