所以我在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.问题我在实现它时遇到了麻烦。
答案 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];
或大小+额外容量,如果你想在阵列中增加一些容量。