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

How do I allocate size for a dynamic array in c++?

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

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

其中 size 是数组中元素的数量,allocated_size 是数组中 space 的数量,BLOCK_SIZE 是 5。所以使用我的另一个删除方法,我需要做类似的检查,但是如果我有一个包含 15 个元素的数组并且我删除了 10 个元素怎么办。然后我将不得不删除数组中的 10 spaces,但我不确定该怎么做。这是我现在拥有的:

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

其中范围是我要删除的元素的数量。我的理论是,也许我可以创建另一个变量,当我声明数组时,我说 allocated_size - BLOCK_SIZE * n 所以如果我需要删除 10 spaces 那么 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]; 

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