使用 TBB 并行创建向量

Use TBB to create a vector in parallel

我有一个 vector<int> foo 和一个函数 float bar(int)。使用 algorithms 库,我可以用

填充 vector<float> quux
transform(foo.begin(), foo.end(), quux.begin(), bar);

我的 foo 函数恰好非常慢,我希望使用 TBB 库跨多个线程并行处理此代码。我本来认为这是一个理想的情况,因为所有操作都是独立的。但是,似乎没有 parallel_transform 算法。我用 parallel_for 算法看到的每个示例都会将数据放回原始数组,但我不能这样做,因为我正在更改类型。

您可以使用对目标的引用来实现它。示例代码:

std::vector<float> quux(foo.size());
parallel_for(size_t(0), foo.size(), [&foo,&quux] (size_t i) {
    quux[i] = bar(foo[i]);
});