如何在 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];
或者大小 + 额外容量,如果你想在你的阵列中增加一些容量。
所以我用 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];
或者大小 + 额外容量,如果你想在你的阵列中增加一些容量。