Другие языки программирования и технологии

Массив в Delphi

Пишу программу, рассчитывающую по простому алгоритму простые числа и добавляющую их в список. Доходило до того, что в списке находилось около 10 000 найденных простых чисел. При этом для вывода использовал обычный TMemo, из которого список чисел мог копировать куда угодно. Хочу немного модернизировать алгоритм, и для его ускорения хорошо бы воспользоваться массивом, чтобы избавиться от постоянной конвертации числа в строку для занесения в TMemo. Но я не могу сказать, какого размера должен быть массив, т.к. могу внести туда и 3 числа, и 3 000. Как я могу использовать массив с неопределенным размером? Для работы с ним мне достаточно знать только индекс требуемого элемента, длина массива в работе алгоритма фигурировать не будет
В Delphi есть класс TList туда можно запихивать что угодно и сколько угодно.
TList правда хранит указатели, но ни кто не мешает переписать соответствующие процедуры под целые числа и даже добавить процедуру генерации необходимого к-ва простых чисел
Динамический массив конечно использовать можно, но все равно нужно зарание определять его размерность
Бауыржан Кошеков
Бауыржан Кошеков
68 014
Лучший ответ
Vadim Vatulin (Г. Владимир) вот про размерность динамического массива я и вычитал, что меня с толку и сбило.

На счет TList, я думал (не знаю, почему) что в него можно только строки писать. Т.е. можно записывать в него real / integer без inttostr() и floattostr() а так же подставлять элементы списка в непосредственно в расчеты?
я использую компонент Dev Exspress - TdxMemData (DB в памяти) создаю поле типа Float - и толкай числа. работай как обычной базой. Без проблем
Можно по записям перемещатся..
честно не знаю есть ли такое понятие в delphi (но думаю есть) , в с++ это реализуется векторами
Vadim Vatulin (Г. Владимир) Не сталкивался с таким (работаю как придется, для себя) в Delphi, но название вполне логично сопоставляется с тем, что я хочу получить)
Вам надо применять TList, правда он не удобен тем что не типизирован.

В основе всех классов коллекций лежит массив, и при нехватке места он автоматически увеличивается до бОльших размеров.

Скажем, в C# есть List<t> способный хранить коллекцию данных любого типа без необходимости работы с указателями. Хотя принцип меняется автоматически - для объектов применяются указатели на них, а для чисел применяются просто значения без ссылок.
Кроме того в C# есть Stack<t>, Queue<t>, ObservableCollection<t>, Dictionary<t,k> и их аналоги. Каждая коллекция реализует обобщённые интерфейсы, таким образом например можно с разными коллекциями работать прозрачно через тот же IList интерфейс, или через типизированный IList<t>.

Почитайте про коллекции в Delphi, скорее всего лучше ознакомиться со всеми вариантами. Должны быть альтернативы какие я описал применительно к C#.
Белов Алексей
Белов Алексей
10 716