2016-03-09 2 views
0

Я читал некоторую информацию о 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?

спасибо.

Редактировать: Я думаю, мне нужно добавить, что это не работает в моей программе. Это не сбой, но похоже, что он ничего не делает.

+1

Действительно ли это, чтобы объединить список с собой? –

+0

Хм ... да, почему? – Soutuyo

+0

@DavidSchwartz это нормально, даже если 'listToConcatenate == this': нет перекрытия памяти. – YSC

ответ

2

Хорошо, я нашел свою ошибку.

Да, вы можете сделать это с memmove, но я что-то пропустил:

void concatenateList(List* listToConcatenate) 
{  
    memmove(this->vector + n, listToConcatenate->vector, (listToConcatenate->n)*sizeof(int)); 
    this->n += listToConcatenate->n; //Mistake here. 
}; 

Вот почему это не было ничего печать. Но, да, я теперь немного понимаю. Спасибо всем за ваши ответы.

Смежные вопросы