相关疑难解决方法(0)

STL算法和并发编程

如果我为我的编译器启用OpenMP,是否可以并行执行任何STL算法/容器操作,如std :: fill,std :: transform?我目前正在与MSVC 2008合作.或者也许有其他方法使它并发?

谢谢.

c++ parallel-processing stl concurrent-programming

16
推荐指数
1
解决办法
6748
查看次数

std :: transform命令保证

这个页面上有这个说明:

std::transform does not guarantee in-order application of unary_op or binary_op.

这是否意味着序列的结果顺序不能保证与输入序列的顺序相关,或者是否意味着,虽然保证了变换的最终结果的顺序,但是可以创建单个元素乱序(虽然它们仍会按顺序出现)?

c++ c++11

11
推荐指数
1
解决办法
628
查看次数

当与顺序执行策略一起使用时,std :: any_of是否保证迭代顺序?

我有一个过滤器功能列表。如果这些函数中的任何一个返回“ 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)

c++ std

7
推荐指数
2
解决办法
135
查看次数