ArrayResize
Устанавливает новый размер в первом измерении массива
intArrayResize(
void& array[], // массив, переданный по ссылке int new_size, // новый размер массива int reserve_size=0// резервное значение размера (избыточное)
);
Параметры
array[]
[out] Массив для изменения размеров.
new_size
[in] Новый размер для первого измерения.
reserve_size=0
[in] Необязательный параметр. Размер для дополнительного резерва.
Возвращаемое значение
При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера; в противном случае возвращает -1 и массив не меняет размеры.
Примечание
Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит исполняющая подсистема терминала.
Общее число элементов в массиве не может превышать 2147483647.
При частом распределении памяти рекомендуется использовать третий параметр, задающий резерв для уменьшения количества физического распределения памяти. Все последующие вызовы функции ArrayResize не приводят к физическому перераспределению памяти, а только меняется размер первого измерения массива в пределах зарезервированной памяти. Следует помнить, что третий параметр будет использоваться только тогда, когда будет происходить физическое распределение памяти, например:
ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
ArrayResize(arr,i,1000);
В данном случае произойдёт 2 перераспределения памяти, один раз до входа в цикл на 2000 элементов, при этом размерность массива будет установлена в 1000 и второй при i равной 2000. Если третий параметр опустить, то произойдёт 2000 физических перераспределения памяти и это замедлит выполнение программы.
P./S.: 它们在这里没有被初始化。
而你在代码中看不到有任何东西被分配给它们。
尽管也许它们的初始化隐藏在这些东西的某个地方。
你所隐藏的代码行。
没错)))。他们没有任何问题。
一般来说,一直跟踪动态数组的 大小是有点不方便的......你需要知道它有多大的重量。那么它的意义何在?....
原则上,这是可以理解的。我唯一不明白的是为什么这个数组不能自动递增。
为什么不能以这种方式进行?这不是我的主意 ))))这正是我试图使用动态数组 的方法...
另外,我还必须保存索引...不太好...
谁说你不能动态地放大它?
为您提供帮助
我们应该做一个关于如何使用帮助的帮助)))))))))))))))))))))。
原则上,这是可以理解的。我唯一不明白的是为什么这个数组不能自动递增。
为什么不能以这种方式进行?这不是我的主意 ))))这正是我试图使用动态数组 的方法...
另外,我还必须保存索引...不太好...
我不明白你在这段代码中想做什么。
在这里,为你勾勒了一个小例子,展示了动态数组的用途以及如何使用它们。
我不明白为什么这个数组不能自动递增。
原则上,这是一个简单的例子,说明动态数组 通常应该如何填充。我已经很久没有用C语言写作了,我不记得了,但是在php中数组就是这样被填充的!一切都是合乎逻辑和可以理解的。如果我向一个数组添加一个元素(arr[] = x),数组会自动展开,这个元素会被添加到数组的末端。而且,我们不必自己把它拉出来,也不必自己指定元素的索引。但在这里,我们必须做出绝对不必要的动作。
区别很明显...
在我看来,这很奇怪,至少可以说))))。
原则上,这是一个简单的例子,说明动态数组 通常应该如何填充。我已经很久没有用C语言写作了,我不记得了,但是在php中数组就是这样被填充的!一切都是合乎逻辑和可以理解的。如果我向一个数组添加一个元素(arr[] = x),数组会自动展开,这个元素会被添加到数组的末端。而且,我们不必自己把它拉出来,也不必自己指定元素的索引。但在这里,我们必须做出绝对不必要的动作。
区别很明显...
我觉得很奇怪,至少可以说))))
谁阻止我们使用OOP和实现类似的语法?
因为语言开发人员是在Syakh上长大的,这严重阻碍了MQL从硬核SI风格到类似PHP/JS的过渡。在普通的PHP中,人们只需分配一个新的值,数组就会自动调整其大小。 MQL使编码者感到其重要性。因此,拿着铲子,享受成为少数专业人员中的一员。
"在程序员不知情的情况下 "是不行的。是程序员发出了 "在数组的末尾添加一个元素 "的命令(arr[] = x)。而且该阵列没有 "独立的决定权"。只有通过执行程序员的命令,它才会增加其大小,从而使程序员不必再跟踪这个大小。)))
根据我的经验,如果程序员在一个包含10个项目、索引为20的数组中写了一些东西,这很可能意味着他/她犯了一个错误,程序应该产生一个错误,但不会增加数组的大小,从而隐藏一个可疑的行为。
所有这些 "调整大小的数组 "在隐藏潜在错误方面的问题远远多于它们的便利性。更重要的是,而且不用跟踪数组的大小也是一种潜在的危险做法,会导致难以修复的错误。