| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4821 人关注过本帖
标题:C++中有没有类似realloc功能的运算符?
只看楼主 加入收藏
shuijingoj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
C++中有没有类似realloc功能的运算符?
以前用C,都是用malloc分配空间,表空间满后用realloc重新分配,这样可以在保留原数据的情况下扩大表空间,

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

不会是要用new新开一个更大空间,然后把数据转过去,再释放原空间吧?这样效率也太低了点……
搜索更多相关主题的帖子: 运算符 realloc 
2009-07-26 15:23
cxn8801
Rank: 2
等 级:论坛游民
帖 子:11
专家分:37
注 册:2008-9-10
收藏
得分:10 
...
先NEW一个指大小的数组
如果满了再重新NEW一个更大的数组
把第一次NEW的数组复制到新NEW的数组
用DELETE删除原先的第一次NEW的数组
(也可以用STL的容器如果空间不够,它们会自动重新分配内存)
2009-07-26 16:34
shuijingoj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-26
收藏
得分:0 
以下是引用cxn8801在2009-7-26 16:34的发言:

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


嗯……跟我想的一样,没有别的办法了么?
2009-07-26 17:53
gz81
Rank: 5Rank: 5
等 级:职业侠客
帖 子:137
专家分:369
注 册:2008-5-1
收藏
得分:0 
觉得可以使用list类

我的空间:http://student./space.php?uid=116706
2009-07-26 19:10
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
回复 楼主 shuijingoj
realloc其实也是重新分配了一个新的更大空间,然后把以前的东西拷贝过去了。只是它是在函数里干的,没让你觉出来而已。
在C中的内存分配,只需申请空间,没用作初始化什么的工作,所以其实不太复杂。

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

而且C++并没有摒弃C的库函数,你要不怕费劲,可以自己用malloc, realloc来分配内存呀,只不过之后自己一定要想着初始化,要不然会出错误的。
2009-07-27 00:48
shuijingoj
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-26
收藏
得分:0 
以下是引用pangding在2009-7-27 00:48的发言:

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

C++中new的 ...



解释得很详细,非常感谢!
2009-07-27 11:27
快速回复:C++中有没有类似realloc功能的运算符?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018271 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved