You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran 2003通用链表模块扩展:添加list_as_array子程序问询

为Fortran 2003通用链表模块添加list_as_array子程序

我来分享一下给@VladimirF的Fortran 2003通用链表模块补充完善后的list_as_array子程序——这个子程序能方便地把链表内容导出到数组中,直接在lists.f90的lists模块里添加即可:

subroutine list_as_array(self, arrayOut)
    class(list), intent(in) :: self  ! 仅读取链表,用intent(in)更符合设计逻辑
    class(*), dimension(:), intent(out) :: arrayOut
    integer :: i
    type(list_node), pointer :: nodeIter

    ! 先校验输出数组长度与链表长度是否匹配
    if (size(arrayOut) /= self%length) then
        error stop "list_as_array: Output array size does not match list length"
    end if

    nodeIter => self%first
    do i = 1, self%length
        ! 处理多态数据的类型匹配与赋值
        select type(data => nodeIter%data)
            type is (integer)
                select type(arrayOut)
                    type is (integer(:))
                        arrayOut(i) = data
                    class default
                        error stop "list_as_array: Integer list cannot be assigned to non-integer array"
                end select
            type is (real)
                select type(arrayOut)
                    type is (real(:))
                        arrayOut(i) = data
                    class default
                        error stop "list_as_array: Real list cannot be assigned to non-real array"
                end select
            ! 可根据需求扩展支持其他类型(如character、logical等)
            class default
                error stop "list_as_array: Unsupported data type in list"
        end select
        nodeIter => nodeIter%next
    end do
end subroutine list_as_array

关键细节说明:

  • Intent优化:把self的intent(inout)改成了intent(in),因为这个子程序只是读取链表内容,完全不需要修改链表状态,更符合Fortran的编程规范。
  • 长度校验:添加了数组长度和链表长度的匹配检查,避免出现数组越界或者数据不完整的问题。
  • 多态类型处理:由于链表和数组都使用了class(*)的多态类型,必须通过select type确保两边类型一致才能赋值,否则会出现编译或运行时错误,你可以根据需求继续扩展支持更多数据类型。
  • 遍历逻辑:通过指针nodeIter遍历链表的每个节点,依次将节点数据赋值到数组对应位置,遍历完成后指针自然走到链表末尾。

内容的提问来源于stack exchange,提问作者jvriesem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:38:22