【发布时间】:2016-01-31 20:23:35
【问题描述】:
所以我用 C++ 编写了一个方法,在该方法中删除了数组中的一系列元素。问题是这是一个动态数组,数组的大小必须始终是一定的大小。因此,如果我从数组中删除了很多元素并留下至少 5 个空格,那么我需要删除这 5 个空格。我已经写了一个类似的方法来删除一个元素。这是检查是否有太多空间的行:
if (size - 1 == allocated_size - BLOCK_SIZE){
其中 size 是数组中元素的数量,allocated_size 是数组中有多少空间,BLOCK_SIZE 是 5。所以使用我的其他删除方法,我需要进行类似的检查,但是如果我有一个数组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。问题是我在实现它时遇到了麻烦。
【问题讨论】:
-
an array of 15 elements and I remove 10 elements......if I need to remove 10 spaces then n would be 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。我想我不能再解释清楚了不止于此。
标签: c++ arrays memory size allocation