压缩一堆数组在一起的c++



是否有一种方法可以将两块堆分配的内存有效地放在一起?这样会比下面的方法更有效吗?

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 ] );

对于逐个字节复制内存,使用memcpy是不会出错的。这将是移动内存最快的方式。

但是,请注意有几个注意事项。首先,您必须手动确保目标内存足够大。您必须手动计算对象的大小(使用sizeof操作符)。它不会很好地工作与一些对象(shared_ptr想到)。在一些优雅的c++ 11中,它看起来相当恶心。

你的方法也可以,应该差不多一样快。

您应该强烈考虑c++的copy算法(或它的一个同类算法),并使用vector s动态调整大小。你可以使用迭代器,这要好得多。同样,它应该几乎和memcpy一样快,还有一个额外的好处,那就是它比移动字节安全得多:shared_ptr和它的同类将像预期的那样工作。

我会这样做,直到被证明是缓慢的:

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中的数据,这可能与对每个数据调用一个函数一样快,甚至更快。

最新更新