C ++:调整动态分配数组大小的正确方法是什么?

时间:2011-03-20 20:07:42

标签: c++ arrays resize

在C中,我会使用realloc完成它。

在C ++中,人们通常会考虑使用STL vector类。

但是如何在不使用上述任何解决方案的情况下在C ++中正确调整数组大小?

4 个答案:

答案 0 :(得分:7)

C ++中没有realloc的好等价物。您需要手动复制数组并复制旧元素。幸运的是,感谢std::copy中的<algorithm>功能,这还不错:

size_t k =  /* ... */
T* buffer = /* .. get old buffer of size k. .. */

T* newBuffer = new T[newSize];  // Assume newSize >= k
std::copy(buffer, buffer + k, newBuffer);

delete [] buffer;
buffer = newBuffer;

希望这有帮助!

编辑:重新排序最后两行!糟糕!

答案 1 :(得分:3)

通过执行vector和realloc do internaly:创建一个新的,更大的数组,复制旧数组的内容,并销毁旧数组。

答案 2 :(得分:0)

int* arr = new int[20];
...
//wanna resize to 25?
int* temp = new int[25];
std::copy(arr, arr+20, temp);
delete [] arr;
arr = temp;
... //now arr has 25 elements

但是,当然,你不应该这样做:)

答案 3 :(得分:0)

如果你坚持在C ++中自己做这件事,那么可能想要大致像std::vector那样做,并使用全局新运算符分配原始内存,然后使用placement new来创建对象“到位”。

否则,您最终会在分配的所有内存中构造对象,然后在使用它们时对其进行分配。除非你知道初始(默认)对象构造是轻量级的,否则你宁可避免使用它。