hdu3823,暴力题,不过要开2000W的数组,C++中怎么开那么大的数组,而不越界呀?谢谢

[复制链接]
查看11 | 回复2 | 2012-10-27 02:08:36 | 显示全部楼层 |阅读模式
额,c++里用int * ary = new int[2000000];开在自由存储区里,或者直接和C一样开成全局变量,应该都是可以的。LZ说到的vector是C++里STL的一个容器,它的内存管理方法并不是LZ想的那样,而是这样的:vector维护一个数组作为它存储数据的地方,这个数组是动态的,也就是用new来开出来的,并且有一个默认大小(当然也可以用参数来制定)。当这个数组因为插入而满了的时候,就再开一个大小为原数组的2倍再加1的数组,然后把原来的数组元素逐一复制到新数组中,最后再删除旧数组。 所以它要维护2000W个元素,很有可能开出4000w大小的数组来额.... 话说C里面能做的C++都可以做啊,就是在自由存储区开空间的方法不同,...
回复

使用道具 举报

千问 | 2012-10-27 02:08:36 | 显示全部楼层
采用分段的方法将一维数组变成多维数组就可以了,再用一个数组记录下每段的地址, 并重载"[]"用于快速下标访问, 实际上就是一个简单的动态数组的实现方案. 一般来说,在32位的系统中,只要一次不申请以G为单位的内存,基本上不会出问题的,主要是会很慢,尤其是物理内存很小的情况下.如果实在是数据量很大的话,比如说总数据量超过了4G,就要考虑将上面的小片...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行