我想制作一个具有以下尺寸的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
基本上我不知道第二个维度。根据一些标志,如果这些标志没问题,我想继续向数组中添加更多元素。
我该怎么做?
答案 0 :(得分:1)
有几种可能的解决方案。您可以使data
成为可分配的数组,并猜测N
的最大值。只要您没有超出N
,就会不断添加数据项。如果新项目超出数组大小,则创建一个临时数组,将data
复制到临时数组,取消分配data
并重新分配更大的维度。
另一种设计选择是使用链表。这更灵活,因为长度是无限的。您丢失“随机访问”,因为列表是链接而不是索引。您创建一个包含各种数据的用户定义类型,例如,缩放器,数组,等等,以及指针。添加列表项时,指针指向下一个项。由于支持指针,所以在Fortran> = 90中是可能的。
我建议在网上搜索或阅读有关这些数据结构的书籍。
答案 1 :(得分:0)
假设你所写的内容或多或少是你的代码真正发展的,那么你肯定知道一件事:N
不能大于T
。您不必更改do
- 循环,但您肯定需要在循环之前初始化data
。