24小时热门版块排行榜    

查看: 2879  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

qingkonggzc

银虫 (小有名气)

[交流] fortran动态数组大小分配问题(allocatable)? 已有2人参与

各位大神,我定义了一个动态数组type(sta_information),allocatable::sta_info(,在给sta_info分配大小的时候遇到了问题,我有一个循环,想让这个数组的大小随着循环变化可以吗?还是必须要开始时就指定一个较大的能放下所有数据/字符串的数组?因为我把所有数据放进去之后要进行从A到Z的排序,如果数组太大有空的会不会影响排序?
就是第一个循环大小分配55,到第二个循环的时候让他大小变成100,第三个循环的时候大小变成200(也就是分别产生55,45,100个数据),因为不知道数据总量,不想刚开始就把大小设置的比较大,比如allocate(sta_info(1000))等,请问这个可以如何处理,谢谢~~~
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

浔荆

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
7楼: Originally posted by qingkonggzc at 2015-05-28 09:48:17
你好,我还是有点不明白只对1~n号元素进行排序的意思,虽然我想要的是这个结果,是对n号元素排序之后新放到一个数组里面还是在原来的数组里面,最后面的还是空?
allocate(sta_info(0:1000))
sta_info=-10000    ...

记录大小的sta_info(0)可以动态化,写新数据时,从sta_info(0)位元素开始写就行了,例如你要在数组尾部写入45个新数据时,可以这么操作:

do i=1,45   !45为你要写入的新数据个数
     sta_info(0)=sta_info(0)+1
     sta_info(sta_info(0))=....     !在这里写入新数据
enddo
循环结束时,新的数据都储存在数组的尾部,sta_info(0)从原来的55变为了100
9楼2015-05-28 11:45:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

浔荆

木虫 (正式写手)


小木虫: 金币+0.5, 给个红包,谢谢回帖
我也常遇到这样的问题,一般我是通过以下方案解决的。
定义一个很大的数组,如sta_info(0:1000)。
之所以定义成sta_info(0:1000)而非sta_info(1:1000),并不是因为我习惯了C语言里的数组默认下标从0开始。实际上,这里的sta_info(0)和其他元素不一样,它是用来记录整个数组的有效大小的。
例如,我们在第一个循环给元素0:55赋值,其他的元素用不到,可以这么实现:
allocate(sta_info(0:1000))
sta_info=-10000                   !初始化为一个不常见的数,方便调试
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo

简单来说,就是先分配足够的大小,但另外定义一个变量来描述它的实际大小。这样一来避免了数组大小变化的时候,需要频繁的allocate和deallocate。另一方面又可以避免数组太大而带来的速率降低。(排序这样的数组操作,只需要对1:sta_info(0)这些元素进行即可)
2楼2015-05-27 08:19:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询


小木虫: 金币+0.5, 给个红包,谢谢回帖
subroutine DynamicArray
  implicit none
  real*8, allocatable, dimension( :: sta_info
  integer :: i,n=20,j

  do i=1,n
     allocate(sta_info(i))
     
     do j=1,i
        sta_info(j)=j
     end do
     print*,' i=',i,' sizeof(sta_info)=',sizeof(sta_info)
     deallocate(sta_info)
  end do
end subroutine DynamicArray
3楼2015-05-27 13:14:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
2楼: Originally posted by 浔荆 at 2015-05-27 08:19:38
我也常遇到这样的问题,一般我是通过以下方案解决的。
定义一个很大的数组,如sta_info(0:1000)。
之所以定义成sta_info(0:1000)而非sta_info(1:1000),并不是因为我习惯了C语言里的数组默认下标从0开始。实际上, ...

你好,谢谢。
首先这样和直接定义一个较大的数组,然后依次把数据/字符串写进去效果应该是一样的吧,就是有多少数据写多少空间的,剩下的还是空的,然后对其进行排序?这个直接把总共有多少数据计算出来,然后对这1-n个数据进行排序后面的没有影响吗?还是把这1-n个数据提取出来放到一个新的数组里面?
4楼2015-05-27 19:23:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 帮忙看看fileCode +3 wwncly 2026-08-10 5/250 2026-08-10 19:06 by 2000zf36392
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +10 yufeiwaner 2026-08-09 11/550 2026-08-10 18:47 by yufeiwaner
[基金申请] 关于代码变化问题,想知道的进来 +17 且听虎啸 2026-08-07 24/1200 2026-08-10 18:35 by zhangduo2008
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +8 家与远方 2026-08-10 11/550 2026-08-10 17:09 by 六两废铜
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +14 Lanmanbaby 2026-08-09 22/1100 2026-08-10 14:57 by wwncly
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +11 archvillain 2026-08-04 13/650 2026-08-10 14:41 by seekfind
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 2026国自然放榜时间 +9 布布和一二 2026-08-08 9/450 2026-08-10 11:22 by xxxx2020
[基金申请] 这样的filecode谁见过 +11 布布和一二 2026-08-08 22/1100 2026-08-10 11:10 by wmfsnow
[基金申请] filecode与中标关系的预测 +5 布布和一二 2026-08-07 5/250 2026-08-09 16:15 by 袁向阳007
[基金申请] 关于filecode,很负责任的告诉大家 +6 爱看书的可乐 2026-08-08 7/350 2026-08-08 22:13 by a_niu
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 化学口download_prp&fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
信息提示
请填处理意见