【发布时间】:2014-11-22 11:03:37
【问题描述】:
标题或多或少地说明了一切。当我需要一个(就本例而言)整数数组来存储未知数量的值时,我知道我可以使用new *array = new int[size] 更改它的大小。现在我的问题是:如果我有一个一定大小的数组,但我需要让它更大,我可以只使用 new 运算符来扩展它,它是否仍然具有所有以前存储的元素,或者创建一个更聪明具有动态大小的全新数组,将前一个数组中的所有元素复制到新数组和delete[] 旧数组中。基本上只是在两个数组之间交换,只要我需要一个新的大小。
具体来说,我要问的是这段代码是否会按照预期的方式工作
for(int i = 1; i < 10; i++){
int *array = new int[i];
array[i-1] = i;
}
我的假设是这个数组的大小首先是 1,并将值 1 存储在索引 0。然后它将重新分配其大小为 2,并将值存储到索引 1,依此类推,直到 i 为 9。
我想更好地重新表述我的问题:使用 new 初始化的数组是否必须填充元素,还是会复制它在使用运算符之前的元素?
【问题讨论】:
-
new *array = new int[i];看起来很奇怪。不编译的代码不好解释你的意思。 -
请贴一些真实的代码。
-
没有。分配第二个更大的数组,复制内容,然后删除 [] 旧数组。是的,对于大型阵列,这可能会变慢。如果您需要更灵活的东西,还有其他数据结构,如列表、树……与数组相比,它们各有优缺点。
-
@deviantfan 修复了一个错字,抱歉
标签: c++ arrays dynamic-memory-allocation