【发布时间】:2012-01-15 10:09:12
【问题描述】:
我有:
ObjectA 的
unique_ptrs 的向量ObjectB的新默认构造向量的向量,和
对象 B 中具有签名
void f(unique_ptr<ObjectA> o)的函数。
(此处省略词对象)
我如何为所有0 < i < length 并行处理Bvec[i].f(Avec[i])?
我尝试过使用transform(Bvec.begin(), Bvec.end(), A.begin(), B.begin(), mem_fun_ref(&B::f)),但它给出了一堆错误,我不确定它是否会传递正确的 A 作为参数,更不用说让我移动它们了。 (&B::f(A.begin()) 也不能作为最后一个参数。
我也想过使用 for_each 和 lambda 函数,但不知道如何获取相应的元素。我想增加一个计数器,但我认为并行化不好(我可能错了)。
当然,我可以使用从 0 到结束的 for 循环,但我很确定我缺少一个简单的东西,它与简单的 for 循环不平行。
谢谢。
【问题讨论】:
-
您意识到,通过传递一个唯一的指针,您正在将这些指针的所有权从列表中转移到该函数中,对吗?此外,它也不与
std::transform并行。 -
@NicolBolas 是的,我进行了传输,但不,我不知道转换不是并行完成的......谢谢。 (MTG 播放器?题外话,纳米)
-
并行是指并发吗?
transform将像所有其他 stdlib 算法一样按顺序工作。此外,transform永远不会起作用,因为它需要一个返回某些东西的函子。 -
@pmr 是的,我猜同时。我可以在我的脑海中看到 2 行框,其中有一个箭头从一行指向另一行,这应该很容易同时完成,对吧?
-
不,也不一定比按顺序做要快。这完全取决于
f中完成的工作量。
标签: c++ vector c++11 parallel-processing unique-ptr