使用 realloc 增加大小与创建更大的动态数组
Using realloc to increase size vs creating bigger dynamic array
我问这个问题是为了学习;通常我会使用矢量或链表来解决这个问题。
如果动态数组的大小在整个主代码中不断变化,使用起来更高效或更合乎逻辑:创建一个比前一个大一半大小的新动态数组,并将之前的元素复制到其中,或者使用 realloc 使动态数组更大?如果其中之一更有效或更合乎逻辑,为什么?
如果有空间,realloc
可以扩展现有的内存块,完全避免整个分配 + 复制 + 释放过程。使用 new[]
不允许这种可能性。
如果您正在编写惯用的 C++,您应该使用 std::vector
,它在底层做同样的事情。但是为了学习,如果你没有 std::vector
然后使用 realloc
.
请注意 realloc
不是对象感知的。它不会调用构造函数和析构函数。如果你打算在 C++ 中使用它,你最好清楚地知道你在做什么!
我问这个问题是为了学习;通常我会使用矢量或链表来解决这个问题。
如果动态数组的大小在整个主代码中不断变化,使用起来更高效或更合乎逻辑:创建一个比前一个大一半大小的新动态数组,并将之前的元素复制到其中,或者使用 realloc 使动态数组更大?如果其中之一更有效或更合乎逻辑,为什么?
realloc
可以扩展现有的内存块,完全避免整个分配 + 复制 + 释放过程。使用 new[]
不允许这种可能性。
如果您正在编写惯用的 C++,您应该使用 std::vector
,它在底层做同样的事情。但是为了学习,如果你没有 std::vector
然后使用 realloc
.
请注意 realloc
不是对象感知的。它不会调用构造函数和析构函数。如果你打算在 C++ 中使用它,你最好清楚地知道你在做什么!