24小时热门版块排行榜    

查看: 2882  |  回复: 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的回帖

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的回帖
查看全部 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

银虫 (小有名气)

引用回帖:
3楼: Originally posted by pippi6 at 2015-05-27 13:14:14
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 ...

你好,谢谢你,我的这个是只能在这一个循环结束之后才能读出来第二个循环该有多少个数据的,也不能在开始的时候就给他一个大小值啊?你这还是构造一个中间数组用来保存每一个循环的数据,再把这些数据汇总到一个数组里面去,类似于MATLAB里面的矩阵合并C=[a b]?Fortran里面可以这样合并吗?
5楼2015-05-27 19:38:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 帮忙看看fileCode +4 wwncly 2026-08-10 8/400 2026-08-10 22:07 by demonstreets
[基金申请] filecode +8 documentary 2026-08-10 8/400 2026-08-10 19:20 by loufangrui
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +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
[基金申请] 静等基金结果 +5 gjjjzhong 2026-08-10 16/800 2026-08-10 17:19 by Tide man
[基金申请] 关于Filecode分析方法 +3 majunge000 2026-08-10 3/150 2026-08-10 15:46 by lch2012
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +4 布布和一二 2026-08-10 4/200 2026-08-10 14:50 by 医学老男孩
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
[基金申请] 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,很负责任的告诉大家 +6 爱看书的可乐 2026-08-08 7/350 2026-08-08 22:13 by a_niu
[基金申请] 关于豆爷回答的JTJC与%2F数量 +5 yang182083 2026-08-06 7/350 2026-08-08 18:29 by zhanghaozhu
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 好消息?这个有何含义??? +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
信息提示
请填处理意见