S ++一起阵列C ++

时间:2014-07-01 18:07:33

标签: c++ c++11 memory-management heap-memory

有没有办法获取两块堆分配的内存,并将它们有效地放在一起?这会比以下更有效吗?

for( unsigned int i = 0; i < LENGTH_0; ++i )
    AddToArray( buffer, array0[ i ] );
for( unsigned int i = 0; i < LENGTH_1; ++i )
    AddToArray( buffer, array1[ i ] );

2 个答案:

答案 0 :(得分:2)

为了逐字节复制存储器,memcpy不会出错。这将成为移动记忆的最快方式。

但请注意,有几点需要注意。首先,您必须手动确保目标内存足够大。您必须手动计算对象的大小(使用sizeof运算符)。它不能很好地处理一些对象(shared_ptr会浮现在脑海中)。在一些优雅的C ++ 11中,它看起来非常粗糙。

你的方式也有效,应该快得多。

您应该强烈考虑C ++的copy算法(或其中一个兄弟姐妹),并使用vector来动态调整大小。你可以使用更好的迭代器。同样,它应该几乎与memcpy一样快,还有一个额外的好处,它比移动字节更安全得多:shared_ptr并且它的同类产品将按预期工作。

答案 1 :(得分:1)

我做了这样的事情,直到证明变慢:

vector<decltype(*array0)> vec;
vec.reserve(LENGTH_0 + LENGTH_1);
vec.insert(vec.end(),array0,array0 + LENGTH_0);
vec.insert(vec.end(),array1,array1 + LENGTH_1);

取决于存储在array1和array0中的数据,可能比为每个数据调用函数一样快或甚至更快。