2、删除位置[from, to]范围数据的函数 public void removeRange(int from, int to
时间: 2024-09-21 20:06:59 浏览: 33
为了在 CArrayList 类中实现删除指定范围 [from, to] 的功能,你需要确保从索引不会越界,并更新数组容量和实际大小。这里是一个基本的实现思路:
```c
// 更新数组容量和实际大小
void resize(CArrayList* list, size_t new_capacity) {
int* newData = realloc(list->data, sizeof(int) * new_capacity);
if (!newData) {
// 处理内存分配失败的情况
printf("Memory allocation failed.\n");
return;
}
list->data = newData;
list->capacity = new_capacity;
}
void removeRange(CArrayList* list, int from, int to) {
if (from >= list->size || to > list->size) {
printf("Invalid range. Index out of bounds.\n");
return;
}
if (from == to) {
// 如果只有一个元素,直接减小size即可
list->size--;
return;
}
// 保存范围内的最后一个元素到临时变量
int lastElement = list->data[to];
// 向右移动元素,填补被移除范围的位置
memmove(&list->data[from], &list->data[from + 1], sizeof(int) * (to - from));
// 更新最后一个元素的位置
list->data[to] = lastElement;
// 最后缩小实际大小
list->size--;
// 如果需要,调整数组容量以便避免内存浪费
if (list->size < list->capacity / 2 && list->capacity != 0) {
resize(list, list->size * 2); // 可能选择更合理的缩放策略
}
}
```
阅读全文