ArrayInsert

指定されたインデックスから開始して、指定された数の要素をソース配列からターゲット配列に挿入します。

bool  ArrayInsert(
  void&        dst_array[],          // 挿入先の配列
  const void&  src_array[],          // 挿入元の配列
  uint        dst_start,            // 挿入先の配列に挿入されるインデックス
  uint        src_start=0,         // 挿入元の配列でコピーするインデックス
  uint        count=WHOLE_ARRAY     // 挿入する要素数
  );

パラメータ

dst_array[]

[in][out]  追加先の配列

src_array[]

[in]  追加元の配列

dst_start

[in]  ソース配列から要素を挿入するためのターゲット側配列内のインデックス

src_start=0

[in] 開始位置からソース配列の要素が挿入のために取得される、ターゲット配列のインデックス。

count

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

戻り値

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

  • 5052 – ERR_SMALL_ARRAY(startおよび/またはcount パラメータは間違って設定されている、またはsrc_array[]ソース配列が空である)
  • 5056 – ERR_SERIES_ARRAY(配列が変更不可能、指標バッファ)
  • 4006 – ERR_INVALID_ARRAY(自分自身へのコピーは許可されていない、配列の型が異なる、または、クラスオブジェクトまたはデストラクタ構造体を含む固定サイズの配列がある)
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS(配列にPOD構造体が含まれていないため、シンプルなコピーが不可能)。
  • 配列サイズArrayRemove()関数の説明にあるターゲット配列サイズであるdst_array[]を変更するときにエラーが発生しました。

 

注意事項

この関数が固定サイズの配列に使用されている場合、ターゲット側の dst_array[]配列自体のサイズは変わりません。Starting from the dst_start位置から初めて、ターゲット配列の要素は右にシフトされます。最後のcounts要素は失われ、ソース配列からコピーされた要素がとってかわります。

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

ソース配列では、要素はsrc_start指数から始めてコピーされます。ソース配列サイズは変更されません。ターゲット配列に追加される要素は、ソース配列要素へのリンクではありません。つまり、要素が後に2つの配列のいずれかで変更されると、あと一つの配列には反映されません。

例:

//+------------------------------------------------------------------+
//| スクリプトプログラムを開始する関数                                          |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- 固定サイズの配列を宣言し、値を埋める
  int array_dest[10];
  for(int i=0;i<10;i++)
    {
     array_dest[i]=i;
    }
  //--- ソース配列
  int array_source[10];
  for(int i=0;i<10;i++)
    {
     array_source[i]=10+i;
    }
//--- 要素を挿入する前に配列を表示する
  Print("Before calling ArrayInsert()");
  ArrayPrint(array_dest);
  ArrayPrint(array_source);
//--- ソース配列の3つの要素をターゲット配列に挿入して新しいターゲット配列を表示する
  ArrayInsert(array_dest,array_source,4,0,3);
  Print("After calling ArrayInsert()");
  ArrayPrint(array_dest);
/*
  実行結果
ArrayInsert()呼び出し前
  0 1 2 3 4 5 6 7 8 9
ArrayInsert()呼び出し後
  0 1 2 3 10 11 12 7 8 9
*/

参照

ArrayRemove ArrayCopyArrayResizeArrayFree