Je lisais des informations sur memcpy et memmove, et si je ne me trompe pas, vous pouvez utiliser les deux pour déplacer de la mémoire entre différents tableaux.memcpy ou memmove entre différents tableaux
Donc, voici ma question: Si je veux concaténer ces objets avec cette méthode.
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));
}
Ainsi, à partir "listToConcatenate->vector"
qui est beggining, nous allons copier tous les éléments avec de "(listToConcatenate->n)*sizeof(int))"
, et nous allons le mettre à la fin de l'autre réseau "this->vector + n"
.
Cela ne devrait-il pas être correct list2.listToConcatenate(&list1);
? En supposant, bien sûr, nous avons assez d'espace.
Si ce n'est pas le cas, quelle serait la bonne façon de le faire? Cela pourrait-il être fait avec memcpy?
Merci.
Modifier: Je pense que je dois ajouter que cela ne fonctionne pas sur mon programme. Il ne plante pas, mais semble ne rien faire.
Est-il valide de concaténer une liste avec lui-même? –
Hm ... oui c'est, pourquoi? – Soutuyo
@DavidSchwartz c'est bien même si 'listToConcatenate == this': pas de chevauchement de mémoire. – YSC