Двумерное распределение динамических массивов [дубликат]

Пакет Visual Studio NuGet необходимо обновить для новой версии набора инструментов

У меня просто возникла проблема с подключением libpng с Visual Studio 2013. Проблема в том, что в файле пакета были только библиотеки для Visual Studio 2010 и 2012.

Правильное решение - надеяться, что разработчик выпустит обновленный пакет и затем обновит его, но он работал для меня, взломав дополнительную настройку для VS2013, указав на файлы библиотеки VS2012.

Я отредактировал пакет (в папке packages внутри каталога решения), найдя packagename\build\native\packagename.targets и внутри этого файла, скопировав все секции v110. Я изменил v110 на v120 в полях условий только очень осторожно, чтобы пути с именами файлов были все как v110. Это просто позволило Visual Studio 2013 подключиться к библиотекам на 2012 год, и в этом случае он работал.

11
задан milancurcic 19 August 2013 в 17:13
поделиться

2 ответа

Да и нет. Сначала no:

Правильные массивы в Fortran, такие как объявленные следующим образом:

integer, dimension(3,3,4) :: an_array

или как это

integer, dimension(:,:,:,:), allocatable :: an_array

являются регулярными; для каждого измерения существует только одна степень.

Но, если вы хотите определить свой собственный тип для оборванного массива, вы можете, и это относительно легко:

type :: vector
    integer, dimension(:), allocatable :: elements
end type vector

type :: ragged_array
    type(vector), dimension(:), allocatable :: vectors
end type ragged_array

С помощью этого вы можете выделить elements для каждого из vectors для другого размера. Например:

type(ragged_array) :: ragarr
...
allocate(ragarr%vectors(5))
...
allocate(ragarr%vectors(1)%elements(3))
allocate(ragarr%vectors(2)%elements(4))
allocate(ragarr%vectors(3)%elements(6))
17
ответ дан High Performance Mark 26 August 2018 в 11:50
поделиться

, смотрящий на первый ответ, кажется, что нет необходимости создавать производный тип vector, который на самом деле является всего лишь распределяемым целым массивом:

    type ragged_array
    integer,allocatable::v(:)
    end type ragged_array
    type(ragged_array),allocatable::r(:)
    allocate(r(3))
    allocate(r(1)%v(5))
    allocate(r(2)%v(10))
    allocate(r(3)%v(15))

это делает запись немного менее громоздкой ..

4
ответ дан agentp 26 August 2018 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: