删除随机项后减小数组大小,但保持其余部分不变

问题描述 投票:0回答:3

假设我们有一个数据数组,并且我们对这些数据做了一些处理。 在某些时候,其中 1 个数据将被永久删除,再也不会被看到。

如何重新创建数组,使我要删除的项目消失,数组的其余部分保持不变,但大小减小?

人们标记我重复,但事实并非如此。我不能使用向量,因为我必须让它与数组一起使用。

c++ arrays
3个回答
0
投票

实现此目的的一种方法是创建一个数组列表。

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

0
投票

方法结束时,方法中创建的本地数组将被删除。如果您不希望发生这种情况,请将其存储在堆中。永远不会被自动删除。

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--;
}

对物体做同样的事情。请注意,对数组调用删除会删除该数组中的所有元素。


-1
投票

我遵循了@crashmstr 的答案,这是最接近我想做的事情! 标准容器。

在大文件中复制除已删除元素之外的整个数组是行不通的,因为它会增加处理时间、周期、缓存未命中等...

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.