如果我想在执行期间将其内存减少一半,可以使用哪种数据结构

时间:2018-12-21 12:14:22

标签: c++ c algorithm data-structures

我想将数据结构包含的元素数量减少一半。我必须多次这样做。 问题类似于此: 我已经对整数进行了'n'排序,并且必须添加两个连续的数字。因此我剩下的整数数量为n / 2,并且我必须循环直到得到一个整数。 (我简化了问题,我必须并排执行其他操作)

我以为尝试使用大小为n的数组,然后想创建一个大小为n / 2的数组并填充此新数组,最后释放原始数组(使用指针创建)。请注意,我还必须存储每次通过循环评估的数据。

如果我无法解释,请参考此问题 MIXTURE

2 个答案:

答案 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();