type
status
date
slug
summary
category
tags
password
Created time
Jul 30, 2024 06:34 PM
Last edited time
Aug 18, 2024 04:22 PM
UUID
icon
🗒️发表的笔记
URL CK
ErrorCheck
ErrorCheck
Description
1. C++ 风格的复制操作
1.1 使用STL中的copy算法
上述程序中,copy算法将数组a区间中的数复制到以begin(b)开始的区间中去.
1.2 使用array容器(C++11)
2. C风格的复制操作
2.1 使用memcpy()
注意:memcpy()函数的第三个参数表示的是要复制的字节数,而不是要复制的元素数目。至于这样做的原因,可以先来看memcpy()的原型:
void* memcpy(void* destination,const void* source,size_t num);
由memcpy()的函数原型可以看到,该函数的前两个参数的类型是void*类型,这样做是为了使memcpy()可以作用于任何类型的指针。
但这样做又导致了一个问题,即memcpy()不知道传入数组的每个元素用多少字节来表示。也正是因为这个原因,使得memcpy()的第三个参数不能是要复制的元素个数,而是要复制的字节数。
2.2 使用memmove()
该函数与memcpy()类似,只是memmove允许目的位置和源位置重叠,示例如下:
注意:上面的程序中,如果将memmove()换作memcpy()可能也会正常工作,但是这种行为是不可预计的,当目的位置与源位置存在重叠时,应当使用memmove()。