24小时热门版块排行榜    

查看: 2896  |  回复: 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

银虫 (小有名气)

引用回帖:
6楼: Originally posted by 浔荆 at 2015-05-28 08:13:16
对,是一样的。不一样的只是你可以针对非空元素进行操作而已。
假设有n个有效数据,剩余的全是空值。那么,你排序只需要对这n个数据排序就行了,不需要提取出来也不需要中间数组。直接操作部分数组就行。
你 ...

你好,我还是有点不明白只对1~n号元素进行排序的意思,虽然我想要的是这个结果,是对n号元素排序之后新放到一个数组里面还是在原来的数组里面,最后面的还是空?
allocate(sta_info(0:1000))
sta_info=-10000                   !初始化为一个不常见的数,方便调试
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo

sta_info=-10000是相当于给这数组一个unit嘛?不太明白这个初始化的意思。。
sta_info(0)=55                     !确定你需要的数组大小
do i=1,sta_info(0)
     sta_info(i)=.....
enddo
这个当把第二个循环的大小确定为100的时候,怎么样能使它接着在sta_info后面写45个数据,这样应该会使它覆盖掉前一循环的数据吧?还是把大小也存放到一个数组里面,每次循环do从sta_num(i-1)~sta_num(i)?
7楼2015-05-28 09:48:17
已阅   回复此楼   关注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的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] filecode +7 cratir 2026-08-14 11/550 2026-08-15 06:19 by 学员8dgXkO
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +4 k0dTPqJtl0jt 2026-08-14 5/250 2026-08-15 04:45 by 4wMiSEwB6436
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 4/200 2026-08-15 04:17 by 4wMiSEwB6436
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 k0dTPqJtl0jt 2026-08-14 4/200 2026-08-15 01:28 by 4wMiSEwB6436
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 HFw0lei2R37i 2026-08-14 7/350 2026-08-15 00:40 by 4wMiSEwB6436
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HFw0lei2R37i 2026-08-14 5/250 2026-08-14 22:32 by 4wMiSEwB6436
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +5 Ldrop2023 2026-08-13 5/250 2026-08-14 18:48 by ssxclkj
[基金申请] 应该是93bebmhtak前后十一个字符比较关键 +23 Lanmanbaby 2026-08-09 37/1850 2026-08-14 13:40 by Equinoxhua
[基金申请] FileCode能看出啥? +10 要乐观耀哥 2026-08-10 32/1600 2026-08-14 09:37 by 要乐观耀哥
[基金申请] 关于Filecode分析方法 +9 majunge000 2026-08-10 12/600 2026-08-13 23:20 by iwuli
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 8/400 2026-08-10 15:06 by Vierhys
[基金申请] 这样的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
信息提示
请填处理意见