我像这样分配内存:
int *array = new int[n];
array[5] = 3;
然后为其赋值。但是,我想在此期间释放它分配的一些空间。我知道
delete[]
将释放它使用的内存,但我不希望删除整个数组,而只是删除某些元素,例如第一个元素,以便实现FIFO列表。如何解除第一个元素的释放,然后在数组末尾为新元素分配空间而不删除整个元素?它可以用向量代替int吗?
答案 0 :(得分:1)
分配完成后,您可以完全释放内存。部分脱臼是不可能的。但是,您可以使用所需数量的元素重新分配另一个空间,然后将先前的内容复制到新分配的内容并释放先前的内容。例如,
int *array = new int[n];
array[5] = 3;
std::vector<int> myvec(n1); // n1 is the new size
std::copy (array, array+std::min(n1,n), myvec.begin() );
delete [] array;
答案 1 :(得分:0)
first
和last
,将新元素写入array[last % RingBufferSize]
,然后增加last
并读取来自array[first % RingBufferSize]
的元素后跟第一个增量;当first == last
表示您的FIFO为空时,(first + 1) % RingBufferSize == last % RingBufferSize
表示您的FIFO已满,而您无法在不拒绝最旧项目的情况下添加。使用这种方法,您可以使用静态数组并完全避免使用堆流量。log(N)
的复杂性,这比通过在没有删除元素的新数组中复制它来修补数组中的孔要好得多。{/ li>
醇>