gpt4 book ai didi

c++ - 在 parallel_for 中使用函数对象

转载 作者:太空狗 更新时间:2023-10-29 21:29:35 26 4
gpt4 key购买 nike

我刚刚学会了如何并行使用一个函数。以下代码行计算索引的平方值并将其放入数组(称为平方)中的该索引处。 parallel_for 函数在 Visual Studio 2010 中可用,作为标题下并发命名空间的一部分。

parallel_for(static_cast<size_t>(0), count, 
[&squares](size_t n) { squares[n] = (n+1)*(n+1); });

您可以看到它使用 lambda 表达式并行计算平方,并且此代码确实可以正常运行并正确编译。但是,lambda 表达式使代码中的 parallel_for 函数变得困惑。我正在考虑在函数对象中定义 lambda 表达式,例如:

function<void(size_t)> Squares = 
[&squares](size_t n) { squares[n] = (n+1)*(n+1); };

我的问题是如何在 parallel_for 函数中使用此函数 (Squares)?我是否错误地编写了 Squares 函数,或者这只是 parallel_for 使用 lambda 表达式的范例?您可以继续向我推荐一些除 Microsoft 之外的其他并行库,但我仍然想知道我的问题的答案。

最佳答案

任何 lambda 表达式都可以被认为是相应函数对象的匿名版本。

在您的示例中,您的仿函数工作正常,如下所示:

parallel_for(static_cast<size_t>(0), count, Squares);

来自MSDN docs :

A lambda expression is a programming technique that is related to anonymous functions. An anonymous function is a function that has a body, but does not have a name. A lambda expression implicitly defines a function object class and constructs a function object of that class type.

关于c++ - 在 parallel_for 中使用函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com