我想将数据结构包含的元素数量减少一半。我必须多次这样做。 问题类似于此: 我已经对整数进行了'n'排序,并且必须添加两个连续的数字。因此我剩下的整数数量为n / 2,并且我必须循环直到得到一个整数。 (我简化了问题,我必须并排执行其他操作)
我以为尝试使用大小为n的数组,然后想创建一个大小为n / 2的数组并填充此新数组,最后释放原始数组(使用指针创建)。请注意,我还必须存储每次通过循环评估的数据。
如果我无法解释,请参考此问题 MIXTURE
答案 0 :(得分:2)
使用指向malloc
(或calloc
或类似名称)分配的内存的指针,然后使用realloc
调整其大小:
int main()
{
int* myArray = malloc(50 * sizeof(int)); // gets you 50 integers
// perform operations on myArray, accessing it like myArray[3]
int* r = realloc(myArray, 25 * sizeof(int));
if (r) {
myArray = r;
}
// perform some more operations.
free(myArray); // free the memory once you are done with it
}
realloc
返回一个新的指针,该指针指向与您之前传递的指针内容相同的内存。像这样将结果分配回myArray
以获得所需的行为,并且当您不再需要该数组时,对其调用free
就像您没有重新分配数组时通常会这样做一样
答案 1 :(得分:0)
如果我想在执行期间将其内存减少一半,可以使用哪种数据结构
我想将数据结构包含的元素数量减少一半。而且我必须多次这样做。
您可以使用任何动态大小的数据结构,这几乎是除静态大小的数组以外的所有数据结构。
不过,请注意,从技术上讲,不能保证减少为std::vector
分配的内存大小(在调用shrink_to_fit
时发生)。使用向量的示例:
vec.resize(vec.size() / 2);
vec.shrink_to_fit();