【问题标题】:STL vector and transform c++STL向量和变换c ++
【发布时间】:2015-08-04 16:30:26
【问题描述】:

我有一些声明

vector<double> ved1(10), ved2(10), ved3(10);
array<double, 10> vod1, vod2, vod3;
valarray<double> vad1(10), vad2(10), vad3(10);

如何从这个版本转换代码

vad3 = 10.0* ((vad1 + vad2) / 2.0 + vad1 * cos(vad2));

到这里

transform(ved1.begin(), ved1.end(), ved2.begin(), ved3.begin(), plus<double>());

仅使用 vector-STL 版本。

【问题讨论】:

  • 这不是代码生成机。
  • 我在这段代码中看不到任何向量。 valarray 有 operator+ 是有原因的。
  • 您愿意向我解释一下吗?
  • @Mikhail Gritsenko 显示一些可用于演示代码的向量初始化器。
  • @Vlad 来自莫斯科,它可以是任何更可取的值。关键是使该代码仅使用 vector-STL 版本工作

标签: c++ vector stl


【解决方案1】:

你可以做同样的事情,但使用 lambda 函数作为最后一个参数

transform(begin(ved1),
          end(ved1),
          begin(ved2),
          begin(ved3),
          [](double a, double b){ return 10.0 * ((a + b) / 2.0 + a * cos(b)); });

【讨论】:

  • 谢谢你,但它说我必须在没有任何其他方法的情况下执行这个和平除了vector-STL
  • 至少现在 someone 正在使用 ved 数组。现在我们需要的只是有人发布使用vodvad 向量的东西,这样生命圈就完成了。
  • 您刚才说要解决“仅使用vector-STL版本”,现在您想在不使用STL的情况下解决它?如果您使用vectorarrayvalarraytransform 函数将起作用。
  • 也许他的意思是他想要一个标准函数来做你的 lambda 做的事情。但是,没有标准函数可以做到这一点。
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2015-11-13
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多