Я читал некоторую информацию о 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?
Спасибо.
редактироватьЯ думаю, что мне нужно добавить, что это не работает в моей программе. Он не падает, но кажется, что ничего не делает.
Хорошо, я нашел свою ошибку.
Да, вы можете сделать это с memmove, но я что-то пропустил:
void concatenateList(List* listToConcatenate)
{
memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int));
this->n += listToConcatenate->n; //Mistake here.
};
Вот почему он ничего не печатал. Но да, теперь я немного прояснил ситуацию. Спасибо всем за ваши ответы.
Других решений пока нет …