在C中,我会使用realloc
完成它。
在C ++中,人们通常会考虑使用STL vector
类。
但是如何在不使用上述任何解决方案的情况下在C ++中正确调整数组大小?
答案 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来创建对象“到位”。
否则,您最终会在分配的所有内存中构造对象,然后在使用它们时对其进行分配。除非你知道初始(默认)对象构造是轻量级的,否则你宁可避免使用它。