ArrayResize 関数
この関数は、配列のサイズを再設定します。サイズとは、配列にある要素数のことです。再設定できる配列は最初の次元になります。2次元目以降はできません。
データ型と構成・戻り値
int ArrayResize(①, ②, ③);
戻り値は、成功した場合は、再設定後の要素数を返します。サイズ変更ができなかった場合は、-1が返されます。
引数 [3]
ArrayResize関数は 3個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | array[] | void& | - | - | サイズを変更する配列。 |
② | new_size | int | - | - | 再設定するサイズ。 最初の次元配列のみ再設定が可能です。 |
③ | reserve_size | int | - | 0 | オプションのパラメーター。 予約を取得する分散サイズ。 |
この関数は、動的配列にのみ適用できます。SetIndexBuffer関数によってインジケータバッファとして割り当てられた動的配列のサイズは変更できません。インジケータバッファの場合、サイズ変更の全操作は、ターミナルのランタイムサブシステムによって実行されます。
配列内の要素の合計数は 2,147,483,647 を超えることはできません。
メモリ割り当てが頻繁に発生する場合は、物理メモリ割り当ての数を減らすために予約を設定する 3番目のパラメーターを使用することをお勧めします。ArrayResize関数の後続の全ての呼び出しは、メモリの物理的な再割り当てには繋がりませんが、予約されたメモリ内の最初の次元配列のサイズのみを変更します。3番目のパラメーターは、物理メモリの割り当て時にのみ使用されることに注意してください。
(例)
#property strict
void OnInit() {
double arr[][2][3][4];
ArrayResize (arr,1000,1000);
for(int i=1;i<3000;i++) {
ArrayResize (arr,i,1000);
}
}
この場合、メモリは 2回再割り当てされます。1 回目は 2000要素のループに入る前(配列サイズは 1000に設定されます)、2回目は i が 2000に等しくなります。3番目のパラメーターをスキップすると、2000になります。
使用例
ArrayResize関数による配列の要素数の再設定
コード
// ArrayResize関数による配列の要素数の再設定
#property strict
void OnInit() {
int resize=5; //変更するサイズ設定
double num_array[15]={4,1,6,3,16.4,4,2,6,3.3,9,4,5.1,7,3,10}; // 配列をセット
ArrayResize(num_array,resize);
string element = (string)num_array[0];
for(int i=1; i<resize; i++) {
element = element + "," + (string)num_array[i];
}
Print("変更後の配列の状態:num_array[", resize, "]={", element, "}");
}
コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
要素数を 15 → 5 に再設定したので、後半の要素が削られた配列に変わります。