【发布时间】:2016-06-24 03:36:18
【问题描述】:
我正在阅读有关 memcpy 和 memmove 的一些信息,如果我没记错的话,您可以将两者用于在不同数组之间移动内存。
所以这是我的问题:如果我想用这个方法连接这些对象。
class List
{
// Pointer to the beginning.
int* vector;
// Number of elements, n >= 0
int n;
// Capacity for new elements.
int capacity;
}
void concatenateList(List* listToConcatenate)
{
memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
}
因此,从"listToConcatenate->vector" 开始,我们将使用"(listToConcatenate->n)*sizeof(int))" 复制其中的所有元素,并将其放在另一个数组"this->vector + n" 的末尾。
这不应该是正确的list2.listToConcatenate(&list1);吗?当然,假设我们有足够的空间。
如果不是,那么正确的方法是什么?这可以用 memcpy 完成吗?
谢谢。
编辑:我想我需要补充一点,这不适用于我的程序。它不会崩溃,但似乎什么也没做。
【问题讨论】:
-
将列表与自身连接是否有效?
-
嗯...是的,为什么?
-
@DavidSchwartz 没关系,即使
listToConcatenate == this:没有内存重叠。 -
你可以使用
::memcpy()。 -
您可以将数组的一部分 memcpy 到同一数组的另一部分,只要源范围和目标范围不重叠。
标签: c++ arrays concatenation memcpy memmove