嗨,我想(乘、加等)向量按标量值,例如 myv1 * 3
,我知道我可以用 forloop 做一个函数,但是有没有办法使用 STL 函数来做到这一点? {Algorithm.h :: 变换函数}之类的东西?
原文由 Ismail Marmoush 发布,翻译遵循 CC BY-SA 4.0 许可协议
嗨,我想(乘、加等)向量按标量值,例如 myv1 * 3
,我知道我可以用 forloop 做一个函数,但是有没有办法使用 STL 函数来做到这一点? {Algorithm.h :: 变换函数}之类的东西?
原文由 Ismail Marmoush 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您必须将结果存储在 新的 vector 中,那么您可以使用来自 std::transform()
<algorithm>
标头的 --- :
#include <algorithm>
#include <vector>
int main() {
const double scale = 2;
std::vector<double> vec_input{1, 2, 3};
std::vector<double> vec_output(3); // a vector of 3 elements, Initialized to zero
// ~~~
std::transform(vec_input.begin(), vec_input.end(), vec_output.begin(),
[&scale](double element) { return element *= scale; });
// ~~~
return 0;
}
所以,我们在这里要说的是,
element
s) vec_input
( vec_input.begin()
)到结束( vec_input.begin()
)
[beginning, end)
),范围element
传递给最后一个参数,lambda 表达式,vec_output
从头开始( vec_output.begin()
)。
拉姆达表达式
[&scale]
) 的值,std::transform()
传递给它)vec_input
中。最后说明:虽然没有必要,但您可以通过以下 lambda 表达式:
[&scale](double element) -> double { return element *= scale; }
它明确指出 lambda 表达式的输出是双精度数。但是,我们可以省略它,因为在这种情况下,编译器可以自己推断返回类型。
原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
是的,使用
std::transform
:在 C++17 之前,您可以使用
std::bind1st()
,这在 C++11 中已被弃用。对于占位符;