自定义复制动态数组

时间:2015-04-27 06:47:49

标签: c++ arrays copy

如何像这样复制动态数组:复制数组的所有元素,但是从第二个数组开始,而不是从0索引开始,而是从第一个开始。

//We have array x, which have 5 elements, and array y, which have 6 elements;
y[1]=x[0];
y[2]=x[1];
//etc...

P.S。不要逐个元素复制,我可以这样使用std::copymemcpy ??

编辑:重新分配数组比这更有效吗?

int* arr = new int[20];
...
//wanna resize to 25?
int* temp = new int[25];
std::copy(arr, arr+20, temp);
delete [] arr;
arr = temp;
... //now arr has 25 elements

但不使用矢量或其他stl对象。

2 个答案:

答案 0 :(得分:2)

std :: copy使用迭代器,因此您可以将目标迭代器增加一个:

对于固定大小的数组和c ++ 11,这应该有效:

std::copy( std::begin(x), std::end(x), std::begin(y)+1 )

对于动态数组,std :: end不起作用,但可以使用指针算术:

std::copy( x, x+5, y+1 )

答案 1 :(得分:1)

对于您的情况,您可以使用std::copy或任何适当的内存复制/移动函数(memcpymemmove,如果区域重叠),后者因为您的对象类型({ {1}})可以轻微复制 -

如果您的类型可以轻松复制(uint8_t就是这样),您还应该知道std::copy可能 。这是一项要求(至少我没有意识到这一点,我确信如果有的话,我会听到它),但每个供应商我都会这样做。 ve seen为简单复制可分配对象提供SFINAE解决方案,以便为了效率而简单地执行uint8_t

简而言之,您可能会使用memmove

获得所需内容
std::copy

并确保std::copy(x, x+x_len, y+1); 至少有y个广告位。