![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| mspuz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 20.6.2005 Где: Ногинск Репутация: нет Всего: нет |
Если есть массив, например из 100 элементов и его нужно обнулять при каждой итерации. Раньше я просто создавал цикл, в котором каждому элементу массива присваивал ноль. А недавно познакомился с функцией SetLength, что натолкнуло меня на мысль, а почему не сделать так:
SetLength(MyMas,0) SetLength(MyMas,100) По идеи должно сработать. Правильно ли это, быстрее ли это и вообще может существует другой, более рациональный подход |
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 3 Всего: 18 |
Лучше сделать FillChar (или ZeroMemory), а SetLength приводит к операциям перераспределения памяти.
|
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
SetLength - не какнает для Array'ев
А для обнуления лучше всего прогонять циклом и занулять -------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
MBo, именно так.
Кроме того, от SetLength память не занулится, а забъется мусором. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
С каких пор? SetLength прекрасно можно использовать для динамических массивов. Хотя, как указал MBo, это не самая быстрая операция. Быстрее просто чистить память. Опять же, разовое перераспределение на небольших массивах не очень-то повлияет на скорость. -------------------- |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
С чего бы это? Добавлено @ 13:00 При использовании SetLength новые элементы массива имеют значение 0. Разве нет? Это сообщение отредактировал(а) Yanis - 1.3.2006, 13:00 |
|||
|
||||
| Rennigth |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
И чем она медленная?
Да, прохо что не залуляем память, а просто устанавливает длинну, но если это не критично, то она прикрастно подходит и быстрее. Тем более после циклов все равно придеться длинну менять. -------------------- (* Honesta mors turpi vita potior *) |
||||
|
|||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
-------------------- |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Сорри для DynArray делфя вот это юзает:
но, сути не менят. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Эт я погорячился.
Посмотрел реализацию SetLength...
Добавлено @ 13:31 Но что-то мне говорит, что просто FillChar будет работать немножко быстрее |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Snowy,
а эт ты где такое нашел?, у тя какая Делфя, у мя 6-ка. Добавлено @ 13:43 Вопрос отпал Это сообщение отредактировал(а) Rennigth - 1.3.2006, 13:44 -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
В это в Delphi 7. |
|||
|
||||
| Budy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 616 Регистрация: 6.2.2004 Где: Екатеринбург Репутация: 1 Всего: 2 |
Демо,
-------------------- Как ты назовешь свой корабль, так на нем и напишут ![]() |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |