我想寫的remove
for Java的ArrayList
等值C.c從動態數組
刪除元素這裏是我的代碼。它假定索引是列表中的有效索引。
void arrayListRemove(ArrayList* list, int index){
int i;
if (arrayListSize(list)==1){
list->size = 0;
free(list->data);
list->data = NULL;
} else {
for(i=index;i<arrayListSize(list)-1;i++){
list->data[i] = list->data[i+1];
}
list->data = realloc(list->data, (arrayListSize(list) - 1) * sizeof(void*));
if (list->data != NULL){
--list->size;
} else {
exit(1);
}
}
}
這是正確的嗎?
代碼能否在沒有arrayListSize(list) == 1
檢查的情況下工作?即realloc(list->data, 0)
是否釋放arrayList?我在網上看到有關realloc(ptr, 0)
會發生什麼衝突。
「這是否正確」涵蓋了很多的理由。你有沒有什麼特別的問題,比如「爲什麼這個輸入Y在X行上崩潰」,或者「這可以做得更快」等等。 – 2012-07-25 19:01:35
代碼是否在沒有arrayListSize(list)== 1檢查的情況下工作?即。 realloc(list-> data,0)釋放arrayList?我在網上看到有關realloc(0)會做什麼的衝突。 – 2012-07-25 19:11:34
注意:你可以通過使用memmove()來避免顯式循環。你可以用'sizeof list-> data [0]'替換'sizeof(void *)'。如果列表是無序的,則用數組中最後一個元素替換已刪除的元素會更便宜。最後:如果指數超出規模,您仍然會減小尺寸,這看起來不對。 – wildplasser 2012-07-25 19:27:35