majhar писал(а):Как это???
Ну, как ни странно, а именно вот так.
Я только там в объявлении неправильно матрицу написал. Надо вот так:
- Код: Выделить всё
DynArray: array of array of Integer;
Для меня самого было божественным откровением узнать в своё время, что размер динамическому массиву можно задавать не только в одном измерении, но и в двух. Хотя в хелпе об этом не было ни слова написано. Экие они там тихони, право слово.
majhar писал(а):Это спорный вопрос. Мне, например, работа функции fpc_dynarray_setlength из rtl, гораздо менее понятна.
Скорее не спорный, а вопрос привычки.
Но если исходить из того, с чем Вы полностью согласны, то вникать в реализацию каждой функции RTL нет никакой необходимости до тех пор, пока эта функция делает то, что нам нужно. И нас примирять с этой функцией должно то обстоятельство, что предназначена она для внутреннего применения в модуле
system. Разве что Вы захотите довести скорость работы с динамическими массивами до уровня первой космической.
Правда на сегодняшний день и динамические массивы уже вчерашний день.
Классы, которые созданы по типу хранения данных наподобие массива (например TStringList или TList), обеспечивают неизмеримо большее удобство в применении, чем динамический массив. Ведь динамический массив ограничен функционально тем, что это всего лишь коробочка для хранения данных, с неизвестным начальным объёмом. Кроме хранения он ничего более не умеет.
А вот классу можно придать нужный функционал, например он может не только хранить матрицу, но и производить её транспортирование или инвертирование, если речь идёт о логическом содержимом. И уже в пользовательской программе не нужно ломать голову, как нам транспортировать матрицу, мы её просто транспортируем и всё...