主题:怎样开辟一个二维数组能让其每行长度可任意缩放呢?
timwan
[专家分:0] 发布于 2010-06-04 15:36:00
要开辟一个二维数组,但是在计算过程中需要不断改变其每行的长度,该如何实现呢?
回复列表 (共29个回复)
沙发
zinsser_1982 [专家分:400] 发布于 2010-06-04 18:32:00
用自定义数据结构
type row_data
integer,pointer,dimension(:)::column
endtype row_data
type(row_data),pointer,dimension(:)::row
allocate(row(nrow))
do irow=1,nrow
allocate(row(irow)%column(ncolumn))
enddo
其中ncolumn对每一行可以取不同值
上面的做法只是能保证每一行的列数不相同,但一般需要事先定义好。如果需要动态的改变每一行的列数,在上面的自定义数据结构中用串行结构代替数组就可以了。
板凳
asymptotic [专家分:16630] 发布于 2010-06-04 19:36:00
1 楼网友停留在 Fortran 95 标准层次,若是用 Fortran 2003 语法,则更佳。
3 楼
timwan [专家分:0] 发布于 2010-06-04 21:15:00
[quote]用自定义数据结构
type row_data
integer,pointer,dimension(:)::column
endtype row_data
type(row_data),pointer,dimension(:)::row
allocate(row(nrow))
do irow=1,nrow
allocate(row(irow)%column(ncolumn))
enddo
其中ncolumn对每一行可以取不同值
上面的做法只是能保证每一行的列数不相同,但一般需要事先定义好。如果需要动态的改变每一行的列数,在上面的自定义数据结构中用串行结构代替数组就可以了。
[/quote]
谢谢您!
这样开辟有一个问题:如果nrow很大的话,会导致allocate的次数很多,这样光动态数组的头就会浪费很大的空间,似乎行不通呀。
4 楼
timwan [专家分:0] 发布于 2010-06-04 21:17:00
[quote]1 楼网友停留在 Fortran 95 标准层次,若是用 Fortran 2003 语法,则更佳。[/quote]
Fortran 2003 语法该怎样实现呢?能举个简单的例子吗?
5 楼
xiaoliu420 [专家分:20] 发布于 2010-06-04 23:40:00
同问?请指教!
6 楼
asymptotic [专家分:16630] 发布于 2010-06-04 23:53:00
Type parameter
type:: matrix(m, n, IP, WP)
integer, kind:: IP = kind(0), WP = kind(0.0)
integer(kind = IP), len:; m, n
real(kind = WP):: mat(m, n)
end type
8 楼
xiaoliu420 [专家分:20] 发布于 2010-06-05 08:43:00
[quote]Type parameter
type:: matrix(m, n, IP, WP)
integer, kind:: IP = kind(0), WP = kind(0.0)
integer(kind = IP), len:; m, n
real(kind = WP):: mat(m, n)
end type[/quote]
非常感谢!
9 楼
zinsser_1982 [专家分:400] 发布于 2010-06-05 09:30:00
[quote]Type parameter
type:: matrix(m, n, IP, WP)
integer, kind:: IP = kind(0), WP = kind(0.0)
integer(kind = IP), len:; m, n
real(kind = WP):: mat(m, n)
end type[/quote]
受教了!看来是落伍了啊,得继续学习了!
10 楼
timwan [专家分:0] 发布于 2010-06-05 10:00:00
[quote]Type parameter
type:: matrix(m, n, IP, WP)
integer, kind:: IP = kind(0), WP = kind(0.0)
integer(kind = IP), len:; m, n
real(kind = WP):: mat(m, n)
end type[/quote]
谢谢!
我怎么看不懂啊,mat(m, n)开辟之后能改变其中一维的大小吗?
应该怎么使用这个自定义类型的数据呢?
我来回复