如何在c ++中为动态数组分配大小?

时间:2016-01-31 20:23:36

标签: c++ arrays memory size allocation

所以我在c ++中编写了一个方法,删除了数组中的一系列元素。问题是这是一个动态数组,数组的大小必须始终是一定的大小。因此,如果我从数组中删除了很多元素并留下至少5个空格,那么我需要删除这5个空格。我已经写了一个类似的方法,我删除了一个元素。这是检查是否有太多空间的行:

if (size - 1 == allocated_size - BLOCK_SIZE){

其中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是我要删除的元素数。我的理论是,也许我可以创建另一个变量,当我声明数组时,我说allocate_size - BLOCK_SIZE * n所以如果我需要删除10个空格,那么n将是2.问题我在实现它时遇到了麻烦。

1 个答案:

答案 0 :(得分:0)

你能用一些算术吗,

数组中的空插槽数量为:

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

或大小+额外容量,如果你想在阵列中增加一些容量。