自定义复制动态数组
Custom copying dynamic array
如何
像这样复制动态数组:复制数组的所有元素,但不是从 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...
附言不想逐个元素复制,我可以以这种方式使用std::copy
或memcpy
吗?
编辑:重新分配数组的方法比这更有效吗?
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 对象。
std::copy 使用迭代器,因此您可以将目标迭代器递增 1:
对于固定大小的数组和 C++11,这应该有效:
std::copy( std::begin(x), std::end(x), std::begin(y)+1 )
对于动态数组,std::end 不起作用,但可以使用指针算法:
std::copy( x, x+5, y+1 )
您可以使用std::copy
或任何适当的内存复制/移动函数(memcpy
,memmove
区域是否重叠),后者是因为您的对象类型(uint8_t
)是可以简单复制分配的。
您还应该知道,如果您的类型是微不足道的可复制可分配的(uint8_t
),std::copy
可能会为您执行后者。这不是一个要求(至少我不知道,我相信我会听到它),但我见过的每个供应商都为微不足道的可复制分配对象提供了一个 SFINAE 解决方案,以简单地执行memmove
以提高效率。
简而言之,您可能会得到您想要的std::copy
std::copy(x, x+x_len, y+1);
并确保y
至少有 x_len+1
个可用插槽。
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结