gpt4 book ai didi

C++删除动态数组的一部分

转载 作者:可可西里 更新时间:2023-11-01 17:42:29 26 4
gpt4 key购买 nike

假设我有一个动态数组,例如:

int* integers = new int[100];

有没有办法只删除数组的一部分,例如:

int* integers2 = integers + 50;
delete[] integers2;

我不仅要删除 50 及以后的所有内容,而且如果我在原始整数数组上调用另一个 delete[],那么它只会删除正确数量的内存,而不会尝试删除最初分配的数量和段错误.

我为什么要这样做:我有一个按数组层次结构的数据结构,我希望能够从一个完整的数组创建这个数据结构。所以我想说

int* level1 = integers;
int* level2 = integers + 50;
int* level3 = integers + 100;

但是当不再需要le​​vel 3时,数据结构会自动delete[] level3。我需要知道这会正确运行,而不仅仅是破坏数组中的所有内容。如果可以,那么我只需要创建新数组并将内容复制过来,但出于性能原因最好避免这样做。

编辑:每个人似乎都仓促得出结论,我应该首先为我的数据结构使用一个动态调整大小的容器(即 vector 、双端队列)。我使用数组级别是有充分理由的(而且它们的大小并不像我在我的示例中看起来的那样)。我只是在寻找一种好方法,让我的数据结构有一个构造函数,它接受一个数组或 vector ,而不需要将原始内容复制到新的数据结构中。

最佳答案

不,这不会正确运行。您只能delete[]new[] 获得的指针,否则结果是未定义的并且可能会发生不好的事情。

如果您真的需要数组变小,您必须分配一个新数组并手动复制内容。

关于C++删除动态数组的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com