如果我为我的编译器启用OpenMP,是否可以并行执行任何STL算法/容器操作,如std :: fill,std :: transform?我目前正在与MSVC 2008合作.或者也许有其他方法使它并发?
谢谢.
在这个页面上有这个说明:
std::transform does not guarantee in-order application of unary_op or binary_op.
这是否意味着序列的结果顺序不能保证与输入序列的顺序相关,或者是否意味着,虽然保证了变换的最终结果的顺序,但是可以创建单个元素乱序(虽然它们仍会按顺序出现)?
我有一个过滤器功能列表。如果这些函数中的任何一个返回“ true”,则不应进一步处理事件。
std :: any_of似乎适合此用例,但我想保证按其添加到我的列表的顺序调用过滤器函数(因为它们可能会产生副作用)。因此,如果我使用std :: any_of,我需要知道它调用过滤器函数的顺序是确定性的,从列表的begin()到end()。
我已经检查了std :: any_of上的C ++标准和顺序执行策略,但是没有提到顺序保证。我没有找到关于cppreference的顺序保证的提法,也没有在stackoverflow上找到足够类似的答案。
我的结论是,没有订单保证。尽管大多数编译器可能会按顺序处理这些函数,但我不应该依赖它。
bool MyClass::event(QEvent* event)
{
std::vector<std::function<bool(QEvent*)> > functionList = getCurrentEventFilters();
const auto bFilter = std::any_of(functionList .begin(),
functionList .end(),
[&event](std::function<bool(QEvent*)> function) {return function(event);});
if (bFilter)
{
return true;
}
return Base::event(event);
}
Run Code Online (Sandbox Code Playgroud)