データ構造体

CArray

CArray は変数の動的配列の基本クラスです。

説明

CArray クラスは、メモリ割り当て、ソート、及びファイルでの作業などの、動的配列の変数操作を意図しています。

宣言

  class CArray : public CObject

タイトル

  #include <Arrays\Array.mqh>

継承階層

  CObject

      CArray

直接子孫

CArrayChar, CArrayDouble, CArrayFloat, CArrayInt, CArrayLong, CArrayObj, CArrayShort, CArrayString

クラスメソッド

属性

 

Step

配列のステップ増分サイズを取得します。

Step

配列のステップ増分サイズを設定します。

Total

配列の要素数を取得します。

Available

追加のメモリ割り当てをせずに利用可能な配列の要素の数を取得します。

Max

メモリの再割り当てなしで可能な配列の最大サイズを取得します。

IsSorted

指定されたモードでそーとされている配列のフラグを取得します。

SortMode

配列のソートモードを取得します。

クリアのメソッド

 

Clear

メモリを解放せずに、配列の全ての要素を削除します。

ソートのメソッド

 

Sort

指定されたオプションで配列をソートします。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Type, Compare

派生クラス

  • CArrayChar
  • CArrayShort
  • CArrayInt
  • CArrayLong
  • CArrayFloat
  • CArrayDouble
  • CArrayString
  • CArrayObj

CArrayChar

CArrayChar クラスは char または uchar 型の変数の動的配列のクラスです。

説明

CArrayChar クラスは char または uchar 型の動的配列の変数を操作する能力を提供します。配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

宣言

  class CArrayChar : public CArray

タイトル

  #include <Arrays\ArrayChar.mqh>

継承階層

  CObject

      CArray

          CArrayChar

クラスメソッド

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

変更メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

CArrayShort

CArrayShort クラスは short または ushort 型の変数の動的配列のクラスです。

説明

CArrayShort クラスは short または ushort 型の動的配列の変数を操作する能力を提供します。配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

宣言

  class CArrayShort : public CArray

タイトル

  #include <Arrays\ArrayShort.mqh>

継承階層

  CObject

      CArray

          CArrayShort

クラスメソッド

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

CArrayInt

CArrayInt クラスは int または uint 型の変数の動的配列のクラスです。

説明

CArrayInt クラスは、int または uint 型変数の動的配列を操作する関数を提供します。配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

宣言

  class CArrayInt : public CArray

タイトル

  #include <Arrays\ArrayInt.mqh>

継承階層

  CObject

      CArray

          CArrayInt

直接子孫

CSpreadBuffer

クラスメソッド

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

CArrayLong

CArrayLong クラスは long または ulong 型の変数の動的配列のクラスです。

説明

CArrayLong クラスは、long または ulong 型変数の動的配列を操作する関数を提供します。配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

宣言

  class CArrayLong : public CArray

タイトル

  #include <Arrays\ArrayLong.mqh>

継承階層

  CObject

      CArray

          CArrayLong

直接子孫

CRealVolumeBuffer, CTickVolumeBuffer, CTimeBuffer

クラスメソッド

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

 

CArrayFloat

CArrayFloat クラスは float 型の変数の動的配列のクラスです。

説明

CArrayFloat クラスは、float 型変数の動的配列を操作する関数を提供します。ソートや検索、配列要素の追加、挿入、及び削除や、配列のソートや検索が提供されています。また、ファイルを操作するためのメソッドを実装されています。

宣言

  class CArrayFloat : public CArray

タイトル

  #include <Arrays\ArrayFloat.mqh>

継承階層

  CObject

      CArray

          CArrayFloat

クラスメソッド

属性

 

Delta

比較の許容範囲を設定します。

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

CArrayDouble

CArrayDouble クラスは double 型の変数の動的配列のクラスです。

説明

CArrayDouble クラスは、double 型変数の動的配列を操作する関数を提供します。ソートや検索、配列要素の追加、挿入、及び削除や、配列のソートや検索が提供されています。また、ファイルを操作するためのメソッドを実装されています。

宣言

  class CArrayDouble : public CArray

タイトル

  #include <Arrays\ArrayDouble.mqh>

継承階層

  CObject

      CArray

          CArrayDouble

直接子孫

CDoubleBuffer

クラスメソッド

属性

 

Delta

比較の許容範囲を設定します。

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、メモリを完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

最安値と最高値の検索

 

Minimum

配列の指定された範囲内の最小要素のインデックスを取得します。

Maximum

配列の指定された範囲内の最大要素のインデックスを取得します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

 

CArrayString

CArrayString は string 型の変数の動的配列のクラスです。

説明

CArrayString クラスは、string 型変数の動的配列を操作する関数を提供します。ソートや検索、配列要素の追加、挿入、及び削除や、配列のソートや検索が提供されています。また、ファイルを操作するためのメソッドを実装されています。

宣言

  class CArrayString : public CArray

タイトル

  #include <Arrays\ArrayString.mqh>

継承階層

  CObject

      CArray

          CArrayString

クラスメソッド

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列の新しい(減少した)サイズを設定します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

AddArray

配列の最後に別の配列の要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

SearchLinear

配列内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

データ配列をファイルに保存します。

virtual Load

データ配列をファイルから読み込みます。

virtual Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

CArrayObj

CArrayObj クラスは、CObjectと派生クラスのインスタンスへのポインタの動的配列のクラスです。

説明

CArrayObj クラスは、CObject とその派生クラスのインスタンスの動的配列のポインタを操作する機能を提供します。これは、基本データ型のデータ及びより複雑な構成を持つデータ構造体を持つ多次元動的配列を操作することが出来ます。

配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

CArrayObj クラスにはいくつかの注意点があります。

宣言

  class CArrayObj : public CArray

タイトル

  #include <Arrays\ArrayObj.mqh>

継承階層

  CObject

      CArray

          CArrayObj

直接子孫

CIndicators, CSeries

クラスメソッド

属性

 

FreeMode

メモリ管理フラグを取得します。

FreeMode

メモリ管理フラグを設定します。

メモリ制御

 

Reserve

メモリを割り当てて、配列のサイズを増加します。

Resize

配列の新しい(減少した)サイズを設定します。

Shutdown

配列をクリアして、配列メモリ(要素メモリ以外)を完全に開放します。

追加メソッド

 

Add

配列の最後に要素を追加します。

AddArray

配列の最後に要素を追加します。

Insert

指定された位置に配列の要素を挿入します。

InsertArray

指定された位置に別の配列の要素を挿入します。

AssignArray

別の配列の要素を複製します。

更新メソッド

 

Update

指定された位置の配列の要素を変更します。

Shift

配列内の指定された位置から要素を指定されたオフセットに移動します。

削除メソッド

 

Detach

配列の指定された位置から要素を取得して、配列から削除します。

Delete

配列の指定された位置から要素を削除します。

DeleteRange

配列の指定された位置から要素のグループを削除します。

Clear

メモリを解放せずに、配列の全ての要素を削除します。

アクセスメソッド

 

At

配列の指定された位置から要素を取得します。

比較メソッド

 

CompareArray

配列を別の配列と比較します。

ソートされた配列の操作

 

InsertSort

ソートされた配列に要素を挿入します。

Search

ソートされた配列内でサンプルに等しい要素を検索します。

SearchGreat

ソートされた配列内でサンプルより大きい要素を検索します。

SearchLess

ソートされた配列内でサンプルより小さい要素を検索します。

SearchGreatOrEqual

ソートされた配列内でサンプル以上の要素を検索します。

SearchLessOrEqual

ソートされた配列内でサンプル以下の要素を検索します。

SearchFirst

ソートされた配列内でサンプルに等しい最初の要素を検索します。

SearchLast

ソートされた配列内でサンプルに等しい最後の要素を検索します。

入出力

 

Save

データ配列をファイルに保存します。

Load

データ配列をファイルから読み込みます。

Type

配列の型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

実用的な配列は(標準ライブラリの全てのクラスを含む)CObject クラスから派生します。

例として、2 次元配列を見てみます。

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//—
void OnStart()
{
int i,j;
int first_size=10;
int second_size=100;
//— 配列を作成する
CArrayObj    *array=new CArrayObj;
CArrayDouble *sub_array;
//—
if(array==NULL)
{
printf(“Object create error”);
return;
}
//— 子配列を作成する
for(i=0;i<first_size;i++)
{
sub_array=new CArrayDouble;
if(sub_array==NULL)
{
delete array;
printf(“Object create error”);
return;
}
//— 配列に書き込む
for(j=0;j<second_size;j++)
{
sub_array.Add(i*j);
}
array.Add(sub_array);
}
//— 配列作成に成功
for(i=0;i<first_size;i++)
{
sub_array=array.At(i);
for(j=0;j<second_size;j++)
{
double element=sub_array.At(j);
//— 配列要素を使用する
}
}
delete array;
}

注意点 #

このクラスは動的メモリを制御するので、配列の要素を操作する際には注意するべきです。

メモリ管理のメカニズムは、FreeMode (bool) メソッドを使用して有効/無効に出来ます。デフォルトではメカニズムは有効です。

よって、CArrayObj クラス操作の方法は 2 つあります。

1. メモリ管理のメカニズムが有効(デフォルト)

この場合、CArrayObj は、要素が配列から除去された後、要素に使用されていたメモリを解放する責任を負います。このプログラムでは、ユーザは、配列要素を解放してはいけません。

例:

  int i;
//— 配列を作成する
CArrayObj *array=new CArrayObj;
//— 配列要素に書き込む
for(i=0;i<10;i++) array.Add(new CObject);
//— 何かする
for(i=0;i<array.Total();i++)
{
CObject *object=array.At(i);
//— 要素に何かする
にて。にて。にて。
}
//— 配列とその要素を削除する
delete array;

2. メモリ管理のメカニズムが無効

この場合、CArrayObj は、要素が配列から除去された後、要素に使用されていたメモリを解放する責任を負いません。ユーザプログラムが配列要素を解放するべきです。

例:

  int i;
//— 配列を作成する
CArrayObj *array=new CArrayObj;
//— メモリ管理のメカニズムを無効にする
array.FreeMode(false);
//— 配列要素に書き込む
for(i=0;i<10;i++) array.Add(new CObject);
//— 何かする
for(i=0;i<array.Total();i++)
{
CObject *object=array.At(i);
//— 要素に何かする
にて。にて。にて。
}
//— 配列要素を削除する
while(array.Total()) delete array.Detach();
//— 空の配列を削除する
delete array;

CList

CList は CObject と派生クラスのインスタンスへのポインタの動的配列のクラスです。

説明

CList クラスは CObject とその派生クラスのインスタンスのリストを操作する機能を提供します。配列要素の追加/挿入/削除、配列のソート、ソートされた配列での検索が実装されています。またファイル操作のメソッドも実装されています。

CList の操作にはいくつかの注意点があります。このクラスは動的メモリを制御するので、配列の要素を操作する際には注意するべきです。

メモリ管理の注意点は CArrayObj において説明されたものと同じです。

宣言

  class CList : public CObject

タイトル

  #include <Arrays\List.mqh>

継承階層

  CObject

      CList

クラスメソッド

属性

 

FreeMode

リスト要素の削除に使用されるメモリ管理のフラグを取得します。

FreeMode

リスト要素の削除に使用されるメモリ管理のフラグを設定します。

Total

リストの要素数を取得します。

IsSorted

リストがソートされているかを示すフラグを取得します。

SortMode

ソートモードを取得します。

作成メソッド

 

CreateElement

リストで新しい項目を作成します。

追加メソッド

 

Add

リストの最後に要素を追加します。

Insert

指定された位置にリストの要素を挿入します。

削除メソッド

 

DetachCurrent

リストの現在の位置から要素を「物理的に」削除せずに削除します。

DeleteCurrent

リストの現在の位置から要素を削除します。

Delete

リストの指定された位置から要素を削除します。

Clear

リストの全要素を削除します。

ナビゲート

 

IndexOf

リスト要素のインデックスを取得します。

GetNodeAtIndex

リストで指定されたインデックスを持つ項目を取得します。

GetFirstNode

リストの最初の要素を取得します。

GetPrevNode

リストの前の要素を取得します。

GetCurrentNode

リストの現在の要素を取得します。

GetNextNode

リストの次の要素を取得します。

GetLastNode

リストの最後の要素を取得します。

順序付けメソッド

 

Sort

リストをソートします。

MoveToIndex

リストの現在の要素を指定された位置に移動します。

Exchange

リストの 2 つの要素を交換します。

比較メソッド

 

CompareList

リストを別のリストと比較します。

検索メソッド

 

Search

ソートされたリスト内でサンプルに等しい要素を検索します。

入出力

 

virtual Save

リストデータをファイルに保存します。

virtual Load

リストデータをファイルから読み込みます。

virtual Type

リストの型識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

 

CTreeNode

CTreeNode は CTree 二進木の節点(ノード)のクラスです。

説明

CTreeNode は CTree 二進木の節点を操作する機能を提供します。ツリーのナビゲーションのオプションは、このクラスで実装されています。その他に、ファイル操作のメソッドも実装されています。

宣言

  class CTreeNode : public CObject

タイトル

  #include <Arrays\TreeNode.mqh>

継承階層

  CObject

      CTreeNode

直接子孫

CTree

クラスメソッド

属性

 

Owner

所有者ノードのポインタを取得/設定します。

Left

左ノードのポインタを取得/設定します。

Right

右ノードのポインタを取得/設定します。

Balance

ノードのバランスを取得します。

BalanceL

ノードの左サブブランチのバランスを取得します。

BalanceR

ノードの右サブブランチのバランスを取得します。

新しい要素の作成

 

CreateSample

新しいノードインスタンスを作成します。

比較

 

RefreshBalance

ノードのバランスを再計算します。

検索

 

GetNext

次のノードのポインタを取得します。

入出力

 

SaveNode

ノードデータをファイルに保存します。

LoadNode

ノードデータをファイルから読み込みます。

virtual Type

ノード型の識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Save, Load, Compare

実際には CTreeNode クラスの派生クラスのツリーが使用されます。

CTreeNode の派生クラスは事前に定義されたメソッドを持たなければなりません。CreateSample は CTreeNode の派生クラスの新しいインスタンスを作成します。Compare は CTreeNode の派生クラスのキーフィールドを比較します。 Type はノードの識別に必要で、SaveNode 及び LoadNode はファイル操作に必要です。

CTree 派生クラスの例を見てみましょう。

//+——————————————————————+
//|                                                   MyTreeNode.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net/ |
//+——————————————————————+
#property copyright “2010, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
//—
#include <Arrays\TreeNode.mqh>
//+——————————————————————+
//| CTreeNode から派生した CMyTreeNode クラスを記述する              |
//+——————————————————————+
//| CMyTreeNode クラス                                               |
//| 目的:二分木の要素のクラス                     |
//|             CTreeNode の派生クラス                      |
//+——————————————————————+
class CMyTreeNode : public CTreeNode
{
protected:
//— ユーザデータ
long              m_long;           // long 型のキーフィールド
double            m_double;         // double 型のカスタム変数
string            m_string;         // string 型のカスタム変数
datetime          m_datetime;       // datetime 型のカスタム変数

public:
CMyTreeNode();
//— ユーザデータアクセスに使用されるメソッド
long              GetLong(void)                { return(m_long); }
void              SetLong(long value)          { m_long=value;  }
double            GetDouble(void)              { return(m_double); }
void              SetDouble(double value)      { m_double=value;  }
string            GetString(void)              { return(m_string); }
void              SetString(string value)      { m_string=value;  }
datetime          GetDateTime(void)            { return(m_datetime); }
void              SetDateTime(datetime value)  { m_datetime=value;  }
//— ファイル操作のメソッド
virtual bool      Save(int file_handle);
virtual bool      Load(int file_handle);
protected:
virtual int       Compare(const CObject *node,int mode);
//— クラスインスタンス作成のメソッド
virtual CTreeNode* CreateSample();
};
//+——————————————————————+
//| CMyTreeNode クラスコンストラクタ                                  |
//| 入力:なし                                                   |
//| 出力:なし                                                   |
//| メモ:なし                                                   |
//+——————————————————————+
void CMyTreeNode::CMyTreeNode()
{
//— ユーザデータの初期化
m_long        =0;
m_double      =0.0;
m_string      =“”;
m_datetime    =0;
}
//+——————————————————————+
//| 指定されたアルゴリズムでの他のツリーノードとの比較   |
//| 入力: node – 比較されるツリー要素                          |
//|         mode – 比較アルゴリズムの識別子              |
//| 出力:比較結果(>0、0、<0 )                         |
//| メモ:なし                                                   |
//+——————————————————————+
int CMyTreeNode::Compare(const CObject *node,int mode)
{
//— ツリー構築アルゴリズムが 1 つだけであるため、パラメータモードが無視される
int res=0;
//— 明示的な型キャスト
CMyTreeNode *n=node;
res=(int)(m_long-n.m_long);
//—
return(res);
}
//+——————————————————————+
//| 新しいクラスインスタンスの作成                               |
//| 入力:なし                                                   |
//| 出力:CMyTreeNodeクラスの新しいインスタンスへのポインタ         |
//| メモ:なし                                                   |
//+——————————————————————+
CTreeNode* CMyTreeNode::CreateSample()
{
CMyTreeNode *result=new CMyTreeNode;
//—
return(result);
}
//+——————————————————————+
//| ツリーノードデータをファイルに書き込みます。                                 |
//| 入力:file_handle – 既に書き込みのために開かれたファイルのハンドル   |
//| 出力:成功の場合は true、それ以外の場合は false                            |
//| メモ:なし                                                   |
//+——————————————————————+
bool CMyTreeNode::Save(int file_handle)
{
uint i=0,len;
//— チェック
if(file_handle<0) return(false);
//— ユーザデータの書き込み
//— long 型のカスタム変数の書き込み
if(FileWriteLong(file_handle,m_long)!=sizeof(long))         return(false);
//— double 型のカスタム変数の書き込み
if(FileWriteDouble(file_handle,m_double)!=sizeof(double))   return(false);
//— string 型のカスタム変数の書き込み
len=StringLen(m_string);
//— 文字列の長さを書き込む
if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE)   return(false);
//— 文字列を書き込む
if(len!=0 && FileWriteString(file_handle,m_string,len)!=len) return(false);
//— datetime 型のカスタム変数の書き込み
if(FileWriteLong(file_handle,m_datetime)!=sizeof(long))     return(false);
//—
return(true);
}
//+——————————————————————+
//| ファイルからツリーノードデータを読み込む                                |
//| 入力: file_handle – 既に読み込みのために開かれたファイルのハンドル   |
//| 出力:成功の場合は true、それ以外の場合は false                            |
//| メモ:なし                                                   |
//+——————————————————————+
bool CMyTreeNode::Load(int file_handle)
{
uint i=0,len;
//— チェック
if(file_handle<0) return(false);
//— 読み込み
if(FileIsEnding(file_handle)) return(false);
//— char 型のカスタム変数の読み込み
//— long 型のカスタム変数の読み込み
m_long=FileReadLong(file_handle);
//— double 型のカスタム変数の読み込み
m_double=FileReadDouble(file_handle);
//— string 型のカスタム変数の読み込み
//— 文字列の長さを読み込む
len=FileReadInteger(file_handle,INT_VALUE);
//— 文字列を読み込む
if(len!=0) m_string=FileReadString(file_handle,len);
else       m_string=“”;
//— datetime 型のカスタム変数の読み込み
m_datetime=FileReadLong(file_handle);
//—
return(true);
}

 

CTree

CTree はCTreeNode とその派生クラスを節点とする二進木のクラスです。

説明

CTree は CTreeNode クラスインスタンスとその派生クラスを節点(ノード)とした二進木の操作を提供します。ツリー要素の追加/挿入/削除のオプションとツリー内の検索は、クラスに実装されています。ファイル操作のメソッドも実装されています。

CTree では動的メモリ管理は実装されていません(これは CList 及び CArrayObj とは異なります)。全てのツリーノードは、メモリ解放で削除されます。

宣言

  class CTree : public CTreeNode

タイトル

  #include <Arrays\Tree.mqh>

継承階層

  CObject

      CTreeNode

          CTree

クラスメソッド

属性

 

Root

ツリーの根(ルート)を取得します。

新しい要素の作成

 

CreateElement

ノードの新しいインスタンスを作成します。

書き込み

 

Insert

ツリーにノードを追加します。

削除

 

Detach

指定されたノードをツリーから取り外します。

Delete

指定されたノードをツリーから削除します。

Clear

ツリーの全てのノードを削除します。

検索

 

Find

ツリー内でサンプルによってノードを探します。

入出力

 

virtual Save

全てのツリーデータをファイルに保存します。

virtual Load

ファイルからツリーデータを読み込みます。

virtual Type

ツリー型の識別子を取得します。

クラスから継承されたメソッド CObject

Prev, Prev, Next, Next, Compare

クラスから継承されたメソッド CTreeNode

Parent, Parent, Left, Left, Right, Right, Balance, BalanceL, BalanceR, RefreshBalance, GetNext, SaveNode, LoadNode

実際には CTreeNode クラスの派生クラスを持った CTree 派生クラスのツリーが使用されます。

CTree の派生クラスは事前に定義された CreateElement メソッドを持たなければいけません。このメソッドは新しい CTreeNode の派生クラスのノードを作成します。

CTree の派生クラスの例を見てみましょう。

//+——————————————————————+
//|                                                       MyTree.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net/ |
//+——————————————————————+
#property copyright “2010, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
//—
#include <Arrays\Tree.mqh>
#include “MyTreeNode.mqh”
//—
input int extCountedNodes = 100;
//+——————————————————————+
//| CTree.から派生された CMyTree クラスを記述する                      |
//+——————————————————————+
//| CMyTree クラス                                                  |
//| 目的:二分探索木の建築とナビゲーション   |
//+——————————————————————+
class CMyTree : public CTree
{
public:
//— カスタムデータによるツリーの検索のメソッド
CMyTreeNode*        FindByLong(long find_long);
//— ツリー要素作成のメソッド
virtual CTreeNode *CreateElement();
};
//—
CMyTree MyTree;
//+——————————————————————+
//| 新しいツリーノードの作成                                    |
//| 入力:なし                                                   |
//| 出力:成功した場合は、新しいツリーノードのポインタ、または NULL            |
//| メモ:なし        &nbnbsp;                                          |
//+——————————————————————+
CTreeNode *CMyTree::CreateElement()
{
CMyTreeNode *node=new CMyTreeNode;
//—
return(node);
}
//+——————————————————————+
//| m_long の値によってのリスト内の要素検索                    |
//| 入力:find_long – 探される値                             |
//| 出力:見つかった要素のポインタ、または NULL               |
//| メモ:なし                                                   |
//+——————————————————————+
CMyTreeNode* CMyTree::FindByLong(long find_long)
{
CMyTreeNode *res=NULL;
CMyTreeNode *node;
//— 検索パラメータを渡すためにツリーノードを作成する
node=new CMyTreeNode;
if(node==NULL) return(NULL);
node.SetLong(find_long);
//—
res=Find(node);
delete node;
//—
return(res);
}
//+——————————————————————+
//| 「CMyTree クラスのテスト」スクリプト                                |
//+——————————————————————+
//—  文字列初期化の配列
string str_array[11]={“p”,“oo”,“iii”,“uuuu”,“yyyyy”,“ttttt”,“rrrr”,“eee”,“ww”,“q”,“999”};
//—
int OnStart() export
{
int          i;
uint         pos;
int          beg_time,end_time;
CMyTreeNode *node; //— CMyTreeNode クラスサンプルへの一時的なポインタ
//—  
printf(“Start test %s.”,__FILE__);
//— MyTree に extCountedNodes 個の MyTreeNode クラスインスタンスのノードを書き込む
beg_time=GetTickCount();
for(i=0;i<extCountedNodes;i++)
{
node=MyTree.CreateElement();
if(node==NULL)
{
//— 緊急終了
printf(“%s (%4d): create error”,__FILE__,__LINE__);
return(__LINE__);
}
NodeSetData(node,i);
node.SetLong(i);
MyTree.Insert(node);
}
end_time=GetTickCount();
printf(“Filling time of MyTree is %d ms.”,end_time-beg_time);
//— 一時的な TmpMyTree ツリーを作成する
CMyTree TmpMyTree;
//— 半分(偶数)のツリー要素を取り外す
//— 一時的な TmpMyTree に追加する
beg_time=GetTickCount();
for(i=0;i<extCountedNodes;i+=2)
{
node=MyTree.FindByLong(i);
if(node!=NULL)
if(MyTree.Detach(node)) TmpMyTree.Insert(node);
}
end_time=GetTickCount();
printf(“Deletion time of %d elements from MyTree is %d ms.”,extCountedNodes/2,end_time-beg_time);
//— 取り外した物を返す
node=TmpMyTree.Root();
while(node!=NULL)
{
if(TmpMyTree.Detach(node)) MyTree.Insert(node);
node=TmpMyTree.Root();
}
//— Save(int file_handle); メソッドの操作をチェックする
int file_handle;
file_handle=FileOpen(“MyTree.bin”,FILE_WRITE|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!MyTree.Save(file_handle))
{
//— ファイル書き込みエラー
//— 緊急終了
printf(“%s: Error %d in %d!”,__FILE__,GetLastError(),__LINE__);
//— 終了前にファイルを閉じる
FileClose(file_handle);
return(__LINE__);
}
FileClose(file_handle);
}
//— Load(int file_handle); メソッドの操作をチェックする
file_handle=FileOpen(“MyTree.bin”,FILE_READ|FILE_BIN|FILE_ANSI);
if(file_handle>=0)
{
if(!TmpMyTree.Load(file_handle))
{
//— ファイル読み込みエラー
//— 緊急終了
printf(“%s: Error %d in %d!”,__FILE__,GetLastError(),__LINE__);
//— 終了前にファイルを閉じる
FileClose(file_handle);
return(__LINE__);
}
FileClose(file_handle);
}
//—
MyTree.Clear();
TmpMyTree.Clear();
//—
printf(“End test %s. OK!”,__FILE__);
//—
return(0);
}
//+——————————————————————+
//| ノードの内容を操作ログに出力する関数                        |
//+——————————————————————+
void NodeToLog(CMyTreeNode *node)
{
printf(”   %I64d,%f,’%s’,’%s'”,
node.GetLong(),node.GetDouble(),
node.GetString(),TimeToString(node.GetDateTime()));
}
//+——————————————————————+
//| ノードに乱数を書き込む関数                     |
//+——————————————————————+
void NodeSetData(CMyTreeNode *node,int mode)
{
if(mode%2==0)
{
node.SetLong(mode*MathRand());
node.SetDouble(MathPow(2.02,mode)*MathRand());
}
else
{
node.SetLong(mode*(long)(-1)*MathRand());
node.SetDouble(-MathPow(2.02,mode)*MathRand());
}
node.SetString(str_array[mode%10]);
node.SetDateTime(10000*mode);
}

 

Originally posted 2019-07-30 10:02:29.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">