2

我想制作一个具有以下维度的二维数组“数据”: data(T,N) T 是一个常数,NI 不知道任何关于开始的内容。是否有可能在 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

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

我怎样才能做到这一点?

4

2 回答 2

1

有几种可能的解决方案。您可以创建data一个可分配数组并猜测N. 只要您不过度N,您就可以不断添加数据项。如果新项目超过数组大小,则创建一个临时数组,复制data到临时数组,释放data并重新分配更大的维度。

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

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

于 2013-06-21T06:32:36.167 回答
0

假设您编写的内容或多或少是您的代码的实际运行方式,那么您肯定知道一件事:N不能大于T. 您不必更改do-loop,但您肯定需要data在循环之前进行初始化。

于 2013-06-23T16:22:09.710 回答