免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2708 | 回复: 8
打印 上一主题 下一主题

[C] c语言里好像没有动态数组这一说吧,那么...... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-14 14:57 |只看该作者 |倒序浏览
怎么做才能做出动态数组的效果呢?

同志?

论坛徽章:
0
2 [报告]
发表于 2003-02-14 15:02 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

我认为作为一种数据结构数组就不应当有动态的,如果要动态的就只能用其他的数据结构了,比如链表

论坛徽章:
0
3 [报告]
发表于 2003-02-14 15:10 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

可以用指针,用void *realloc(void *ptr, size_t size);重新分配。

论坛徽章:
0
4 [报告]
发表于 2003-02-14 15:18 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

同意二楼的,用list吧
下面这个是我想得出来安全的用法了,还要动态分配的话,大概还是应该用list
void test(int array_len)
{
    int *pInt= new int[array_len];
      for (int i=0;i<array_len;i++){
            pInt = i;         //其实是个指针,模拟数组
     }
     delete [] pInt;
     pInt = 0;
}

论坛徽章:
0
5 [报告]
发表于 2003-02-14 15:21 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

如果用C++的话,可以用vector

论坛徽章:
0
6 [报告]
发表于 2003-02-14 15:41 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

便是要
考虑性能

如果不考虑性能的话
使用链表可以

链表对随机访问的效率很是低

所以不如使用C++

一般用vector

如果数组可能很大的话(有2M以上)
那么使用deque(性能比vector低)

论坛徽章:
0
7 [报告]
发表于 2003-02-14 16:37 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

嗯,另外数据量很大,频繁new,delete ->;list,会在内存中产生大量的碎片.
另外问一下,如果想楼主问的只是用C语言的话, 除了数组和链表, 是否还有其他的折中方法? 谢了!

论坛徽章:
0
8 [报告]
发表于 2003-02-14 22:12 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

那可以使用vector的实现方法

vector是一次分配比较多的空间作为数组使用

然后当空间快不够时再次分配
并把旧值memcpy到新空间

好像是一次分配2048个字节以上
这主要看看你的数据变动是多大来确定再分配的大小

论坛徽章:
0
9 [报告]
发表于 2003-02-14 22:12 |只看该作者

c语言里好像没有动态数组这一说吧,那么......

那可以使用vector的实现方法

vector是一次分配比较多的空间作为数组使用

然后当空间快不够时再次分配
并把旧值memcpy到新空间
然后就可以把它当成是固定数组使用了

好像是一次分配2048个字节以上
这主要看看你的数据变动是多大来确定再分配的大小
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP