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

Jar*_*arx 5 c++ arrays resize

在C中,我会用它来完成它realloc.

在C++中,通常会考虑使用STL vector类.

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

tem*_*def 7

realloc在C++中没有很好的等价物.您需要手动复制数组并复制旧元素.幸运的是,由于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;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

编辑:重新排序最后两行!哎呦!

  • @Alf P. Steinbach- 确实如此,但 `realloc` 仅对 POD 类型是安全的。如果你尝试重新分配一个由字符串、向量等组成的数组,结果是不确定的。我可能应该说没有好的 **general** 替代 `realloc`。 (3认同)