【发布时间】:2011-12-06 13:33:27
【问题描述】:
假设我有一个动态数组,例如:
int* integers = new int[100];
有没有办法只删除部分数组如:
int* integers2 = integers + 50;
delete[] integers2;
我不仅要删除 50 及以后的所有内容,而且如果我在原始整数数组上调用另一个 delete[],那么它只会删除正确数量的内存,而不是尝试删除最初分配的数量和段错误.
我为什么要这样做:我有一个按数组级别构建的数据结构,我希望能够从一个完整的数组创建这个数据结构。所以我想能够说
int* level1 = integers;
int* level2 = integers + 50;
int* level3 = integers + 100;
但是当不再需要level 3时,数据结构会自动删除[] level3。我需要知道这将正常运行,而不仅仅是破坏数组中的所有内容。如果可以,那么我只需要创建新数组并将内容复制过来,但出于性能原因,最好避免这样做。
编辑:每个人似乎都在得出结论,我应该首先为我的数据结构使用动态调整大小的容器(即向量、双端队列)。我使用数组级别是有充分理由的(而且它们的大小不像我在示例中那样)。我只是在寻找一种好方法来为我的数据结构创建一个构造函数,该构造函数接受一个数组或向量,而不需要将原始内容复制到新的数据结构中。
【问题讨论】:
-
std::deque 是你要找的。span>
-
不,不是。事实上,我正在寻找的基本上是一种从数组创建双端队列而不从原始数组复制值的方法。
-
std::deque很像一个自动调整大小的数组。直线向上的数组不能调整大小(除非它是用malloc分配的,然后只调整大小) -
只是好奇,您使用 c 样式数组的原因是什么?