假设我们有一个数据数组,并且我们对这些数据做了一些处理。 在某些时候,其中 1 个数据将被永久删除,再也不会被看到。
如何重新创建数组,使我要删除的项目消失,数组的其余部分保持不变,但大小减小?
人们标记我重复,但事实并非如此。我不能使用向量,因为我必须让它与数组一起使用。
实现此目的的一种方法是创建一个数组列表。
int elements = 10;
int *arrayList= new int [elements]; //create first arraylist of size 10
int *arr2= new int [elements/2]; //create 2nd arraylist of size 5
for(int i=0; i<arr2.length; i++)
arr2[i]=arrayList[i]; //fill in the 2nd array
方法结束时,方法中创建的本地数组将被删除。如果您不希望发生这种情况,请将其存储在堆中。永远不会被自动删除。
int my_array_size = 3;
int *my_array = new int[my_array_size];
my_array[0] = new int(33);
my_array[1] = new int(44);
my_array[2] = new int(55);
这会在堆上保留 5 个连续空间,并且永远不会自动删除,直到您调用
delete []my_array
。
据我了解,您正在谈论一个从数组 [n] 中删除项目并将其设为数组 [n-1] 的函数。如果是这样使用这个
void remove_element(int index){
int *temp_array = new int[my_array_size-1];
int temp_array_next = 0;
for(int i=0;i<my_arr_size;i++){
if(i!=index){
temp_array[temp_array_next++] = my_array[i];
}
}
delete []my_array;
my_array = temp_array;
temp_array = nullptr;
my_array_size--;
}
对物体做同样的事情。请注意,对数组调用删除会删除该数组中的所有元素。
我遵循了@crashmstr 的答案,这是最接近我想做的事情! 标准容器。
在大文件中复制除已删除元素之外的整个数组是行不通的,因为它会增加处理时间、周期、缓存未命中等...
谢谢!