0
我遇到了一个概念上直接的代码问题。我需要从循环内的向量收集一些迭代器,并且我想使用TBB功能来并行化这个循环。这里有一个最小(不)的工作例子:在TBB中获取迭代器parallel_for循环
#include <tbb/tbb.h>
#include <vector>
int main()
{
std::vector<int> v{1,2,3,4,5,6,7,8};
tbb::concurrent_vector<decltype(v)::iterator> cv;
tbb::parallel_for(std::begin(v), std::end(v), [&](const auto& iter)
{
cv.emplace_back(iter);
});
}
正如你所看到的,我对迭代器感兴趣,而不是值。我可以完成使用指针或引用包装(这里下面的例子),类似的事情,但我想知道我不能做我想做什么原因...
#include <tbb/tbb.h>
#include <vector>
int main()
{
std::vector<int> v{1,2,3,4,5,6,7,8};
tbb::concurrent_vector<std::reference_wrapper<decltype(v)::value_type>> cv;
tbb::parallel_for_each(std::begin(v), std::end(v), [&](auto& element)
{
cv.emplace_back(std::ref(element));
});
}
是啊,你是绝对正确的。在文档里我错过了这个观点:'索引类型必须是一个整数类型'。说实话,我无法理解这个限制背后的原因。随机访问的迭代器能够与整数类型“结合”,它支持std :: less等等......但是,谢谢! – dodomorandi