具有不同大小的多维阵列

时间:2013-06-21 05:52:21

标签: arrays multidimensional-array fortran

我想制作一个具有以下尺寸的2D数组“数据”:data(T,N) T是常数,N我不知道任何事情要开始。是否有可能在fortran中做这样的事情

      do i = 1, T
           check a few flags
           if (all flags ok) 
             c = c+ 1
             data(i,c) = some value
           end if
       end do

基本上我不知道第二个维度。根据一些标志,如果这些标志没问题,我想继续向数组中添加更多元素。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

有几种可能的解决方案。您可以使data成为可分配的数组,并猜测N的最大值。只要您没有超出N,就会不断添加数据项。如果新项目超出数组大小,则创建一个临时数组,将data复制到临时数组,取消分配data并重新分配更大的维度。

另一种设计选择是使用链表。这更灵活,因为长度是无限的。您丢失“随机访问”,因为列表是链接而不是索引。您创建一个包含各种数据的用户定义类型,例如,缩放器,数组,等等,以及指针。添加列表项时,指针指向下一个项。由于支持指针,所以在Fortran> = 90中是可能的。

我建议在网上搜索或阅读有关这些数据结构的书籍。

答案 1 :(得分:0)

假设你所写的内容或多或少是你的代码真正发展的,那么你肯定知道一件事:N不能大于T。您不必更改do - 循环,但您肯定需要在循环之前初始化data