C++ 对数组进行复制
1. C++ 风格的复制操作
1.1 使用STL中的copy算法
1 | int a[] = {1,2,3,4,5}; |
上述程序中,copy算法将数组a区间中的数复制到以begin(b)开始的区间中去.
1.2 使用array容器(C++11)
1 | std::array<int,5> arr = {1,2,3,4,5}; |
2. C风格的复制操作
2.1 使用memcpy()
1 | int arr[] = {1,2,3,4,5}; |
注意:memcpy()函数的第三个参数表示的是要复制的字节数,而不是要复制的元素数目。至于这样做的原因,可以先来看memcpy()的原型:
void* memcpy(void* destination,const void* source,size_t num);
由memcpy()的函数原型可以看到,该函数的前两个参数的类型是void*类型,这样做是为了使memcpy()可以作用于任何类型的指针。
但这样做又导致了一个问题,即memcpy()不知道传入数组的每个元素用多少字节来表示。也正是因为这个原因,使得memcpy()的第三个参数不能是要复制的元素个数,而是要复制的字节数。
2.2 使用memmove()
该函数与memcpy()类似,只是memmove允许目的位置和源位置重叠,示例如下:
1 | int arr[] = {1,2,3,4,5,6,7,8}; |
注意:上面的程序中,如果将memmove()换作memcpy()可能也会正常工作,但是这种行为是不可预计的,当目的位置与源位置存在重叠时,应当使用memmove()。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Malloy Yuan 的个人博客!
评论