ArrayRemove

指定されたインデックスから開始して、配列内の指定された数の要素を削除します。

bool  ArrayRemove(
  void&        array[],            // 任意の型の配列
  uint        start,              // 削除開始インデックス
  uint        count=WHOLE_ARRAY  // 要素数
  );

パラメータ

array[]

[in][out]  配列

start

[in] 配列要素の削除を始めるインデックス

count=WHOLE_ARRAY

[in] 削除される要素の数。WHOLE_ARRAYは指定されたインデックスから配列の最後までのすべての要素を意味します。

戻り値

成功の場合はtrue、それ以外の場合はfalse. エラー情報を取得するには、GetLastError() 関数が呼ばれます。可能なエラーは下記です。

  • 5052 – ERR_SMALL_ARRAY(start値が大き過ぎる)
  • 5056 – ERR_SERIES_ARRAY(配列が変更不可能、指標バッファ)
  • 4003 – ERR_INVALID_PARAMETER(count値が大き過ぎる)
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS(デストラクタを持つ複雑なオブジェクトを含む固定サイズの配列)
  • 4006 - ERR_INVALID_ARRAY(デストラクタを持つオブジェクトまたはクラスオブジェクトを含む固定サイズの配列)

 

注意事項

この関数が固定サイズの配列に使用されている場合、配列サイズは変わりません。残りの「tail」が物理的にstartポジションにコピーされます。関数がどのように機能するかを正確に理解するには、以下の例を参照してください。「物理的」コピーとは、コピーされたオブジェクトがコンストラクタまたはコピー演算子の呼び出しによっては作成されないことを意味します。代わりに、オブジェクトのバイナリ表現がコピーされます。このため、デストラクタを使用してArrayRemove()関数をオブジェクトを含む固定サイズの配列に適用することはできません(ERR_INVALID_ARRAYまたはERR_STRUCT_WITHOBJECTS_ORCLASSエラーが発生しています)。このようなオブジェクトを削除するときは、元のオブジェクトとそのコピーに対して、デストラクタを2回呼び出す必要があります。

SetIndexBuffer()関数で指標バッファとして指定された動的配列から要素を削除することはできません。これにより、ERR_SERIES_ARRAYエラーが発生します。指標バッファの場合、すべてのサイズ変更操作は端末の実行サブシステムによって実行されます。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 固定サイズの配列を宣言し、値を埋める
  int array[10];
  for(int i=0;i<10;i++)
    {
     array[i]=i;
    }
//--- 要素を削除する前に配列を表示する
  Print("Before calling ArrayRemove()");
  ArrayPrint(array);
//--- 配列から2つの要素を削除してあたらしい集合を表示する
  ArrayRemove(array,4,2);
  Print("After calling ArrayRemove()");
  ArrayPrint(array);
/*
  実行結果:
  ArrayRemove()呼び出し前
  0 1 2 3 4 5 6 7 8 9
  ArrayRemove()呼び出し後
  0 1 2 3 6 7 8 9 8 9
*/

参照

ArrayInsert ArrayCopyArrayResizeArrayFree