我有多个大型英特尔TBB concurrent_vectors,我需要合并。它们太大了,因此不可能分配足够大小的新concurrent_vector。
...so下面的伪代码不能工作
concurrent_vector<myStruct> A(100000);
concurrent_vector<myStruct> B(100000);
...
concurrent_vector<myStruct> X(100000);
concurrent_vector<myStruct> combined;
combined.resize(A.size()+B.size()....X.size()); // This will fail我想要做的是将第一组向量中的向量转移或交换到组合的向量中,这样A,B.X变成AB.X,我知道tbb支持单个向量的交换(),但我不知道如何交换或附加倍数。谁能给我指明正确的方向?提前谢谢!!
发布于 2014-04-01 09:38:10
不幸的是,没有这样一种方法可以将多个concurrent_vector组合成一个不需要重新分配的方法。它来自于tbb::concurrent_vector严格的数据结构规则,其中每个元素段的大小必须与所有前几段之和的大小相同。
但是请记住,concurrent_vector是在没有重新分配的情况下生长的,所以最好的方法就是一个接一个地附加向量,在复制后立即销毁它们。这样,有更多的机会,足够大的内存块将被释放时,需要。
std::copy(B.begin(), B.end(), A.grow_by(B.size())); B.clear();
std::copy(C.begin(), C.end(), A.grow_by(C.size())); C.clear();
...
std::copy(X.begin(), X.end(), A.grow_by(X.size())); // X.clear();不过,内存碎片会再次破坏一切。
https://stackoverflow.com/questions/22771320
复制相似问题