注册 登录
编程论坛 C++教室

C++中有没有类似realloc功能的运算符?

shuijingoj 发布于 2009-07-26 15:23, 4821 次点击
以前用C,都是用malloc分配空间,表空间满后用realloc重新分配,这样可以在保留原数据的情况下扩大表空间,

今天想用C++的new写一个动态分配空间的顺序线性表,却不知道表满后可以如何扩大空间,不知道C++有没有类似realloc功能的运算符?

不会是要用new新开一个更大空间,然后把数据转过去,再释放原空间吧?这样效率也太低了点……
5 回复
#2
cxn88012009-07-26 16:34
...
先NEW一个指大小的数组
如果满了再重新NEW一个更大的数组
把第一次NEW的数组复制到新NEW的数组
用DELETE删除原先的第一次NEW的数组
(也可以用STL的容器如果空间不够,它们会自动重新分配内存)
#3
shuijingoj2009-07-26 17:53
以下是引用cxn8801在2009-7-26 16:34的发言:

先NEW一个指大小的数组
如果满了再重新NEW一个更大的数组
把第一次NEW的数组复制到新NEW的数组
用DELETE删除原先的第一次NEW的数组
(也可以用STL的容器如果空间不够,它们会自动重新分配内存)


嗯……跟我想的一样,没有别的办法了么?
#4
gz812009-07-26 19:10
觉得可以使用list类
#5
pangding2009-07-27 00:48
回复 楼主 shuijingoj
realloc其实也是重新分配了一个新的更大空间,然后把以前的东西拷贝过去了。只是它是在函数里干的,没让你觉出来而已。
在C中的内存分配,只需申请空间,没用作初始化什么的工作,所以其实不太复杂。

C++中new的工作量大了很多,除了申请空间以外,还要挨个调用构造函数初始化申请的空间。当然转移的工作量也非常巨大,除了要申请新的,初始化,拷贝以外。还要把原先里面的的东西都调用析构函数消灭。总之C++为了类型安全,干了不少可能没用的事,效率什么的不是C++的最大的特色(当然跟其实的面向对象语言比还是快一些的~)。它的实现时,究竟做了什么事,程序员必须心知肚明,由程序员采取更高效的实现才是C++的观念。所以它没有提供效率极其低下的realloc功能的函数,也许是希望你自己能优化这些工作。
而且内存分配工作不是一定能够成功的,还可以使用异常处理之类的技术。系统函数其实无法满足人们多变的需要。要程序员自己动手想想办法~

而且C++并没有摒弃C的库函数,你要不怕费劲,可以自己用malloc, realloc来分配内存呀,只不过之后自己一定要想着初始化,要不然会出错误的。
#6
shuijingoj2009-07-27 11:27
以下是引用pangding在2009-7-27 00:48的发言:

realloc其实也是重新分配了一个新的更大空间,然后把以前的东西拷贝过去了。只是它是在函数里干的,没让你觉出来而已。
在C中的内存分配,只需申请空间,没用作初始化什么的工作,所以其实不太复杂。

C++中new的 ...



解释得很详细,非常感谢!
1