是否可以使用memcpy复制数组的一部分?
比如说我们有一个10个整数的数组。我们可以创建一个新数组,并将最后5个整数复制到其中吗?
是否有其他可用于c / c ++的内存/阵列复制/操作工具?
答案 0 :(得分:9)
是否可以使用memcpy复制数组的一部分?
不,在一般情况下是不可能的。只有当数组中元素的类型为琐碎布局时,才能执行此操作。
比如说我们有一个10个整数的数组。我们可以创建一个新数组,并将最后5个整数复制到其中吗?
int
是琐碎的类型,因此对于特定情况,它会起作用:
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
答案 1 :(得分:1)
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));
这会将5批int
从array1(位置5)复制到array2,位置0。