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 физических перераспределения памяти и это замедлит выполнение программы.
Alexander Puzanov: 言語開発者はSyakhで育ったので、MQLがハードコアなSIスタイルからポップなPHP/JSライクに移行するのをひどく妨げています。MQLは、コーダーにその重要性を感じさせます。だから、シャベルを持って、選ばれたプロフェッショナルの一員であることを楽しんでください。
追記:ここでは初期化されていません。
で、何かが割り当てられていることは、コード上ではわからない。
もしかしたら、この中のどこかに初期化が隠されているかもしれませんが。
の行を隠すことができます。
その通り )))何の問題もないんです。
一般に、動的配列の サイズを常に把握するのは、ちょっと不便ですよね...。重さを知る必要がある。それじゃ、何のために?
これは原理的に理解できることです。ただひとつわからないのは、なぜこの配列が自動的にインクリメントされないのか、ということです。
なぜ、そのようにできなかったのでしょうか。私の考えではない ))))まさに、ダイナミックアレイを 使おうとしたのですが...。
さらに、インデックスを保存しなければならないので...。良くないな...。
ダイナミックに拡大できないなんて、誰が言ったの?
ここで、あなたをサポートします
ヘルプの使い方のヘルプをやるべきだ ))))))))))))))))))))))))))
これは原理的に理解できることです。ただひとつわからないのは、なぜこの配列が自動的にインクリメントされないのか、ということです。
なぜ、そのようにできなかったのでしょうか。私の考えではない ))))まさに、ダイナミックアレイを 使おうとしたのですが...。
さらに、インデックスを保存しなければならないので...。良くないな...。
このコードで何をしようとしたのか理解できません。
ここでは、動的配列がどのようなもので、どのように使うのか、その例を少し紹介します。
なぜ、この配列が自動的にインクリメントされないのか理解できません。
これは原理的に、動的配列に 通常充填する方法の簡単な例である。長いことCで書いてないので覚えていませんが、phpでは配列はこうやって埋めるんですねー。すべてが論理的で理解しやすい。配列に要素を追加する(arr[] = x)と、配列は自動的に展開され、その要素は配列の末尾に追加されます。しかも、自分で伸ばす必要もないし、要素のインデックスを自分で指定する必要もない。しかし、ここでは絶対に無駄な動きをしなければならない。
その差は歴然としている...。
私見ですが、はっきり言っておかしいと思います ))))
これは原理的に、動的配列に 通常充填する方法の簡単な例である。長いことCで書いてないので覚えていませんが、phpでは配列はこうやって埋めるんですねー。すべてが論理的で理解しやすい。配列に要素を追加する(arr[] = x)と、配列は自動的に展開され、その要素は配列の末尾に追加されます。しかも、自分で伸ばす必要もないし、要素のインデックスを自分で指定する必要もない。しかし、ここでは絶対に無駄な動きをしなければならない。
その差は歴然としている...。
はっきり言っておかしいと思う ))))
OOPを使い、似たような構文を実装することを、誰が妨げているのでしょうか?
言語開発者はSyakhで育ったので、MQLがハードコアなSIスタイルからポップなPHP/JSライクに移行するのをひどく妨げています。MQLは、コーダーにその重要性を感じさせます。だから、シャベルを持って、選ばれたプロフェッショナルの一員であることを楽しんでください。
"プログラマーが知らないうちに "は通用しない。配列の最後に要素を追加する」(arr[] = x)という命令を出すのはプログラマです。そして、アレイには「独立した決定権」がない。プログラマーのコマンドを実行することによってのみ、そのサイズが大きくなり、プログラマーはそのサイズを把握することから解放されるのである。)))
私の経験では、もしプログラマがインデックス20で10個のアイテムを含む配列に何かを書き込んだとしたら、それはプログラマが間違いを犯したことを意味する可能性が高く、プログラムはエラーを発生させるべきですが、配列のサイズを 大きくしてはならず、それによって疑わしい行為を隠蔽することができます。
これらの「サイズをいじる配列」はすべて、利便性よりも潜在的なエラーを隠してしまうことの方がはるかに問題なのです。さらに、配列のサイズを把握する必要がないことも、修正困難なバグにつながる危険な行為である可能性があります。