Я читал некоторую информацию о memcpy и memmove, и если я не ошибаюсь, вы можете использовать оба для перемещения памяти между разными массивами.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?
спасибо.
Редактировать: Я думаю, мне нужно добавить, что это не работает в моей программе. Это не сбой, но похоже, что он ничего не делает.
Действительно ли это, чтобы объединить список с собой? –
Хм ... да, почему? – Soutuyo
@DavidSchwartz это нормально, даже если 'listToConcatenate == this': нет перекрытия памяти. – YSC