Читаю справку по функции ArrayResize().
Всё как-бы понятно. При изменении в меньшую сторону, массив пилиться с конца в сторону 0-го индекса. Но есть третий параметр. В справке написано, то мол:
Я читаю так:
1. Размер массива arr изменяется. Тперь он равен 1000 элементам + 1000 резервных. Получается, как-бы 1000 базово, но тероитически, если понадобится может быть увеличена до 2000 автоматически. я верно понимаю?
2. По сколько в цикле у нас итерации от 1 до 3000 почему не будет изменяться размер от 1 до 3000 включительно? Если бы вторым параметров в функцию ArraySize() пришло фиксированное число 3000 я бы понял. А так получается, что у нас цикл. Почему компилятор игнорирует пробег по всем итерациям?
Я понимаю, что arrayList удобнее и гибче, но на 5-ке у меня реализована именно динамически, и не только на 5-ке.. А на 4-ке вариантов нет. Здесь приходится работать с массивами. Поэтому и возник этот вопрос. Т.к. производительность важна.
сложно все у Вас, я понимаю что в справке так написано:
1. обьявили динамический массив и первый раз определяем размер массива с помощью ArrayResize(), причем задаем 3-й параметр с учетом максимально возможного в нашем алгоритме размера массива, т.е. ArrayResize(arr,1,3000);
2. При последующих изменениях размера массива задаем только 2 параметра, т.е.
ArrayResize(arr,1,3000); for(int i=1;i<3000;i++) ArrayResize(arr,i);
вот в таком виде разработчики пишут в справке будет более быстро выполнено изменение размера массива, чем:
ArrayResize(arr,1000); for(int i=1;i<3000;i++) ArrayResize(arr,i);
кактотак
Это понятно. Но в справке такого нет:
ArrayResize(arr,1,3000); for(int i=1;i<3000;i++) ArrayResize(arr,i);
Там же написано только вот так:
ArrayResize(arr,1000,1000); for(int i=1;i<3000;i++) ArrayResize(arr,i,1000);
А вообще, я понял, что если задать резервный размер будет работать быстрее, но почему в том случает только 2 раза будет ресайз не особо понятно. Ведь цикл по 3000 элементов, например, в цикле, который я привёл должен выполнить 3000 итераций. А получается, что как-будто изначально смотрится то, что в 3-ем параметре 1000 и поэтому до 1000-ой итерации пропускается. Хотя как дальше там реализовано хз. Если бы увидел я реализацию, не было бы вопросов, а так можно лишь догадываться.
Давайте объясню на бутылках.
Собралась компания, заказали ящик пива (первый параметр) и ящик про-запас (второй параметр). Сидим - пиво пьем. Как кончится бутылка - ее в пустой ящик и на стол новую ставим. На столе все время 20 бутылок. Но вот выпили 21-ю бутылку, на столе осталось 19, а запас иссяк. Тут снова вступает в действие второй параметр - бежим в магазин за новым ящиком пива. Мораль такова: пока в запасе что-то есть - пьем пиво. Кончился запас - вспоминай про второй параметр и беги в магазин.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Читаю справку по функции ArrayResize().
Всё как-бы понятно. При изменении в меньшую сторону, массив пилиться с конца в сторону 0-го индекса. Но есть третий параметр. В справке написано, то мол:
При частом распределении памяти рекомендуется использовать третий параметр, задающий резерв для уменьшения количества физического распределения памяти. Все последующие вызовы функции ArrayResize не приводят к физическому перераспределению памяти, а только меняется размер первого измерения массива в пределах зарезервированной памяти. Следует помнить, что третий параметр будет использоваться только тогда, когда будет происходить физическое распределение памяти, например:
ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000);
В данном случае произойдёт 2 перераспределения памяти, один раз до входа в цикл на 2000 элементов, при этом размерность массива будет установлена в 1000 и второй при i равной 2000. Если третий параметр опустить, то произойдёт 2000 физических перераспределения памяти и это замедлит выполнение программы.
Я читаю так:
1. Размер массива arr изменяется. Тперь он равен 1000 элементам + 1000 резервных. Получается, как-бы 1000 базово, но тероитически, если понадобится может быть увеличена до 2000 автоматически. я верно понимаю?
2. По сколько в цикле у нас итерации от 1 до 3000 почему не будет изменяться размер от 1 до 3000 включительно? Если бы вторым параметров в функцию ArraySize() пришло фиксированное число 3000 я бы понял. А так получается, что у нас цикл. Почему компилятор игнорирует пробег по всем итерациям?
Я понимаю, что arrayList удобнее и гибче, но на 5-ке у меня реализована именно динамически, и не только на 5-ке.. А на 4-ке вариантов нет. Здесь приходится работать с массивами. Поэтому и возник этот вопрос. Т.к. производительность важна.