是否可以使用 memcpy 复制数组的一部分?
例如,我们有一个由 10 个整数组成的数组。我们可以创建一个新数组,并将最后 5 个整数复制到其中吗?
是否有其他可用于 c/c++ 的内存/数组复制/操作工具?
是否可以使用 memcpy 复制数组的一部分?
不,在一般情况下是不可能的。只有当数组中元素的类型是普通布局时,您才能这样做。
例如,我们有一个由 10 个整数组成的数组。我们可以创建一个新数组,并将最后 5 个整数复制到其中吗?
int
s 是微不足道的类型,因此对于这种特殊情况,它会起作用:
int source[10] = { ::: };
int target[5];
std::memcpy( target, source + 5, 5 * sizeof(int) );
是否有其他可用于 c/c++ 的内存/数组复制/操作工具?
当然, C++ 标准库中的整套算法都适用于数组。您使用指向数组中第一个和最后一个元素的指针作为begin/end
迭代器。或者,如果您使用的是C++11,那么只需std::begin|end( array )
.
std::copy( source + 5, source + 10, target + 0 );
或者
std::copy( std::begin(source) + 5, std::end(source), std::begin(target) );
这是一个可用于检查类型是否为琐碎的元函数,以及此类概念的定义: http: //en.cppreference.com/w/cpp/types/is_trivial
memmove()
用于此目的。
编辑:memcpy()
工作得很好。无论如何,它可能更精简。
在此示例中,代码将如下所示:
int array1[10] = {0,1,2,3,4,5,6,7,8,9};
int array2[5] = {0,0,0,0,0};
memmove(array2, array1 + 5 * sizeof(int), 5 * sizeof(int));
这将从array1,位置5复制5批次int
到array2,位置0。