游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 限之极

飞机该用LIST还是VECTOR

[复制链接]

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2008-9-14 22:05:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

为什么中大型的数据结构要使用vaule语意了,这个时候用指针不是更可以体现指针的快速吗,难道是因为当数据结构大了后会存储很多的数据,于是就需要很多的指针,然后这(指针所需要的内存)也是很“可观”的帐的原因吗,谢谢。。。。。。。。。。。。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-9-16 15:07:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

我想你正好说反了,采用指针才可以减少内存占用,但是作为用户,写代码就麻烦了不是吗?
而采用 vector<MY_STRUCT> 这样的话,内存占用很大。
所以我认为,(如果想要按照value语义写代码)可以实现一个 ptr_vector<MY_STRUCT> ,他的内部采用指针存储,这样用起来方便,还节约空间。

PS.如果元素太多太多的话,可以考虑这样:
vector< vector<MY_STRUCT *> >
把这个封装起来即可。

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-9-20 17:03:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR


vector

可能会好点吧!


32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2008-9-24 11:18:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

这种东西应该用vector稍微好些,特别是有大量飞机、子弹等的时候。

List无论从速度还是占用空间来说耗费都比较大。

像子弹、效果等这些会大量出现又消亡的东西,要尽量避免new/delete,用vector一次申请够一定数量。同时也没必要目标消亡了就删除,设一个标记,出现了就为true,消亡了就false,同时把其下标压栈,下次新申请时弹栈即可。

动态分配内存会非常耗时间的,尽管STL有自己的分配器,但是对于大量产生、消亡的东西还是要尽量避免去每次申请。

[em12]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-9-29 12:18:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

vector的分配原理和 mipmap 相似,就是当分配的空间不够时,分配上次分配的2倍大小。
这样浪费空间很大,但是,push_back 速度可以和 list 媲美!

假设vector目前有 N 个元素,分配了 A 个字节,那么从程序开始,到目前为止,实际进行的内存拷贝量只有:
A + A/2 + A/4 ...

但是空间浪费极大,所以说可以在 vector 中存放指针。

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2008-9-29 17:06:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

instemast 上次说的在大的数据结构中往往又需要的vaule语意,其实我的意思是说如果数据多了后,再给每个数据储存一个指针,但是原来的数据还是要占据应有的空间,简单的说就是占用的空间是  数据空间+指针空间,假定数据空间很大那么指针的空间也会和它成正比,这样就相当于是在用空间换时间(因为的指针的好处就是快),如果没有那么大的内存,那么这样就不是合适了,这样理解对吗?, 谢谢。。。。。。。。。

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2008-9-29 17:11:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

大家都是在说在new的时候会很耗时间,但是使用list的时候也有好处啊,它的任意的位置删除很快啊,而飞机游戏需要这个灵活性,还是因为new耗的时间过多,已经大到足以忽略list的这个好处了。。。谢谢

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2008-9-30 01:50:00 | 显示全部楼层

Re: Re:飞机该用LIST还是VECTOR

限之极: Re:飞机该用LIST还是VECTOR

大家都是在说在new的时候会很耗时间,但是使用list的时候也有好处啊,它的任意的位置删除很快啊,而飞机游戏需要这个灵活性,还是因为new耗的时间过多,已经大到足以忽略list的这个好处了。。。谢谢


这个是一个权衡的问题。vector是个数组,list是个双向链表,

很多时候“删除”并不指的是一定要释放内存,数组里面的元素当不用的时候标记为无效也可以看作为一种删除,而这种删除不需要移动元素,因此并不会比链表慢。只是这种删除并不会真正释放掉内存,而是留在那里,等下次用的时候直接拿来。因此内存只增不减,直到你一次性完全释放整个数组。

对于大量重复出现/消失的小元素来说,这点空间占用根本不算什么,何况在元素大量出现/消亡的过程中这些被标记无效的元素会很快被重新利用,因此也不会浪费太多空间。而相比之下,由于分配/删除特别频繁,new和delete操作耗时影响就非常大了。

因此在飞行射击等这类游戏中,像子弹、效果等大量会快速出现又消亡的东西来说,就要避免每次都new和delete了。

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2008-10-1 22:34:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

先学好数据结构吧,然后你的问题自己就能解决了。

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2008-10-2 16:55:00 | 显示全部楼层

Re:飞机该用LIST还是VECTOR

我学过点数据结构,写过些线形的,但是象表和树什么的还没怎么搞清楚,也就是懂他们大概是怎么实现的,没写过,大家有没有什么好的学习方法来推荐下呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 00:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表