如何在C++中动态数组的大小分配? 我在C++中写了一个方法,在其中删除数组中的元素。问题是,这是一个动态数组,数组的大小必须始终保持一定的大小。因此,如果我从数组中删除了很多元素,并留下了至少5个空格,那么我需要删除这5个空格。我已经编写了一个类似的方法,删除了一个元素。这是检查空间是否过大的一行: if (size - 1 == allocated_size - BLOCK_SIZE){

如何在C++中动态数组的大小分配? 我在C++中写了一个方法,在其中删除数组中的元素。问题是,这是一个动态数组,数组的大小必须始终保持一定的大小。因此,如果我从数组中删除了很多元素,并留下了至少5个空格,那么我需要删除这5个空格。我已经编写了一个类似的方法,删除了一个元素。这是检查空间是否过大的一行: if (size - 1 == allocated_size - BLOCK_SIZE){,c++,arrays,memory,size,allocation,C++,Arrays,Memory,Size,Allocation,其中size是数组中的元素数,allocated_size是数组中的空间量,BLOCK_size是5。所以,对于我的另一个remove方法,我需要做一个类似的检查,但是如果我有一个15个元素的数组,我移除了10个元素,会怎么样呢。然后我将不得不删除数组中的10个空格,但我不知道如何做到这一点。以下是我现在拥有的: if (size - range <= allocated_size - BLOCK_SIZE){ try { new_a

其中size是数组中的元素数,allocated_size是数组中的空间量,BLOCK_size是5。所以,对于我的另一个remove方法,我需要做一个类似的检查,但是如果我有一个15个元素的数组,我移除了10个元素,会怎么样呢。然后我将不得不删除数组中的10个空格,但我不知道如何做到这一点。以下是我现在拥有的:

if (size - range <= allocated_size - BLOCK_SIZE){
            try {
                new_array = new int[allocated_size - BLOCK_SIZE];
            } catch (bad_alloc){
                throw exception (MEMORY_EXCEPTION);
            }

其中range是我要删除的元素数。我的理论是,也许我可以做另一个变量,当我声明数组时,我说allocated_size-BLOCK_size*n,如果我需要删除10个空格,那么n就是2。问题是我在实现这一点上遇到了困难

你能用一些整数运算吗

阵列中的空插槽数为:

int empty_slots = allocated_size - size;  
空块的数量为:

int empty_blocks = empty_slots / 5; 
整数除法截断,因此对于0-4个空插槽,您将有0个空块,对于5-9个空插槽,您将有1个空块等

但你真的不想知道你的新阵列有多大吗?这不一定就是尺寸吗,所以:

int blocks_need = size / 5;                // truncates 
if (size % 5 > 0) {
    blocks_need = blocks_needed + 1;   // add a block if needed
}   
new_array = new int[blocks_needed * 5]; 

或者,如果你想在数组中增加一些额外的容量,可以使用大小+额外的容量。

一个包含15个元素的数组,我删除10个元素……如果我需要删除10个空格,那么n将是2。那么15-10=2?我没想到。不,我不是这么说的。这两个来自我必须删除的内存量。如果我需要释放10块内存,那么我会使用BLOCK_SIZE*2,它等于10,因为BLOCK_SIZE是5,所以5*2=10。我遇到的问题是告诉程序我们需要释放10块内存。你现在明白我在问什么了吗?基本上,我会检查一下我需要释放多少空间。如果我必须释放5个空间,那么n将是1。如果我必须释放10个空间,那么n将是2。如果我必须释放15个空间,那么n将是3。原因是,BLOCK_SIZE设置为5,并且该变量始终为5。因此,5*3等于15。20岁也一样。5*4是20,如果我想去掉20个空格,那么n就是4。我想我再也解释不清楚了。关于新的_数组,分配的_大小必须始终是5的倍数。好的,再次做一些数学运算,blocks_needed=size/5;另外,如果将大小除以5时有余数,则需要再添加一个块,因此,如果大小为%5,则需要向块添加一个