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