| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 582 人关注过本帖
标题:关于动态数组的产生方法
只看楼主 加入收藏
daoke9999
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-5-10
收藏
 问题点数:0 回复次数:5 
关于动态数组的产生方法
还得麻烦大家帮帮忙

我一直在考虑红警中造兵的得原理,我说一说看对不对,根dx8无关,请指教

作一个类CFighter,在程序开始前声明一个该类的指针数组,数组的容量是造兵数的上限。如:
CFighter MyFighter[100];

在响应用户“造兵”动作时,根据用户的选择对CFighter的对象赋值,并累加已造兵数 如:
SumFighter++;
MyFighter[SumFighter].Blood=100;
MyFighter[SumFighter].Speed=10
....................
这样一个新兵就产生了;
在主循环函数中,
for (i=0;i<SumFighter;i++)
{
.......
//显示士兵MyFighter[i]的位置、状态等

}
但是有一个问题就是我的CFighter 如果很大,申请一个100各成员的数组会占很大内存,
在用户制造几个兵的情况下,就导致系统资源的浪费,更何况红警可以造几千个兵。
我看到很多时候用new操作符可以动态申请内存,那么如何在我开始定义数组的时候控制系统不分配内存呢?
在造兵的相应中控制内存的分配,请高手指教
搜索更多相关主题的帖子: 动态 
2006-05-11 22:42
giant
Rank: 1
等 级:新手上路
帖 子:180
专家分:0
注 册:2005-12-11
收藏
得分:0 
用一个指针,然后就对该指针进行动态分配,不可以吗?(我没做过这个程序)
CFighter * pCFighter = new CFighter[n];
...
delete []pCFighter;

2006-05-11 22:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
比如你开始可以定义一个较小的内存分配:
比如,const int first = 10;//初始容量大小的值
CFighter * pCFighter1 = new CFighter[first];(这里把他做缓冲用)
当你快要到达first边界的时候,可以分配另外一个动态数组,是起两倍大小:CFighter * pCFighter2 = new CFighter[first*2];然后把pCFighter1的内容 深拷贝 给pCFighter2。然后first*=2;这样就可以再下一次又循环这样的操作,最后delete [] pCFighter1;就有了另外一个新的动态内存了。
注:翻倍增加动态内存中的倍数可以自己控制,根据自己的情况。
如果按照每创建一个新兵,就将内存重新分配,加一个1,这样会使操作次数太多,减少运行效率。

如果说错哪里,被高手看到,一定指出,我怕误入歧途。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-12 19:03
daoke9999
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-5-10
收藏
得分:0 
谢谢,我试试
2006-05-13 12:42
ale
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-13
收藏
得分:0 
为什么不用链表实现呢
每次产生一个新兵时 用CFighter * pCFighter1 = new CFighter;
产生一个指向新兵的指针,然后将其加入链表中,这样速度不会很慢,但
很节省内存
2006-05-13 16:50
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
好象用容器也不错,直接在每次创建一个新兵,就直接push_back();这样也可以达到效果

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-15 11:25
快速回复:关于动态数组的产生方法
数据加载中...
 
   



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

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