CArrayObj

CArrayObj 클래스는 CObject 및 파생 클래스의 인스턴스에 대한 포인터의 동적 배열 클래스입니다.

Description

클래스 CArrayObj는 CObject 및 그 파생 클래스의 인스턴스에 대한 포인터의 동적 배열로 작업할 수 있는 기능을 제공합니다. 이를 통해 원시 데이터 유형의 다차원 동적 배열과 데이터 구성이 더 복잡한 데이터 구조를 모두 사용할 수 있습니다.

클래스를 사용하면 배열 요소를 추가/삽입/삭제하고, 배열 정렬을 수행하고, 정렬된 배열에서 검색할 수 있습니다. 또한 파일로 작업하는 방법도 구현되었습니다.

CArrayObj 클래스에는 특정한 세부 요소이 있습니다.한

Declaration

   class CArrayObj : public CArray

Title

   #include <Arrays\ArrayObj.mqh>

상속 계층

  CObject

      CArray

          CArrayObj

직계 종속

CIndicators, CSeries

그룹별 클래스 메서드

Attributes

 

FreeMode

메모리 관리 플래그를 가져옵니다

FreeMode

메모리 관리 플래그를 설정합니다

메모리 컨트롤

 

Reserve

메모리를 할당하여 배열 크기를 늘립니다

Resize

배열의 새(작은) 크기를 설정합니다

Shutdown

메모리(요소 제외)의 전체 할당 해제로 배열을 지웁니다.

새 요소 생성

 

virtual CreateElement

지정된 위치에 새 배열 요소를 작성합니다

메서드 추가

 

Add

배열 끝에 요소를 추가합니다

AddArray

배열 끝에 요소를 추가합니다

Insert

요소를 배열의 지정된 위치에 삽입합니다

InsertArray

지정된 위치에서 다른 배열의 배열 요소에 삽입합니다

AssignArray

한 배열의 요소를 다른 배열로 복사합니다

메서드 업데이트

 

Update

지정된 위치 배열에서 요소를 변경합니다

Shift

배열의 지정된 위치에서 지정된 오프셋으로 항목을 이동합니다

메서드 삭제

 

Detach

지정된 위치에서 요소를 가져와 배열에서 제거합니다

Delete

지정된 배열 위치에서 요소를 제거합니다

DeleteRange

지정된 배열 위치에서 요소 그룹을 삭제합니다

Clear

배열 메모리를 해제하지 않고 배열의 모든 요소를 제거합니다

메서드 액세스

 

At

지정된 배열 위치에서 요소를 가져옵니다

메서드 비교

 

CompareArray

배열을 다른 배열과 비교합니다

정렬된 배열 작업

 

InsertSort

정렬된 배열에 요소를 삽입합니다

Search

정렬된 배열에서 샘플과 동일한 요소를 검색합니다

SearchGreat

정렬된 배열에서 샘플 값을 초과하는 값을 가진 요소를 검색합니다

SearchLess

정렬된 배열에서 샘플 값보다 작은 값을 가진 요소를 검색합니다

SearchGreatOrEqual

정렬된 배열에서 샘플 값보다 크거나 같은 값을 가진 요소를 검색합니다

SearchLessOrEqual

정렬된 배열에서 샘플 값보다 작거나 같은 값을 가진 요소를 검색합니다

SearchFirst

정렬된 배열에서 샘플과 동일한 첫 번째 요소를 검색합니다

SearchLast

정렬된 배열에서 샘플과 동일한 마지막 요소를 검색합니다

Input/output

 

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("객체 생성 오류");
      return;
     }
//--- 하위 배열 생성
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("개체 생성 오류");
         return;
        }
      //--- 배열 채우기
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- 배열 생성 OK
   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;
  }

Subtleties #

클래스에는 동적 메모리를 제어하는 메커니즘이 있으므로 배열 요소를 사용할 때 주의해야 합니다.

메모리 관리 메커니즘은 FreeMode (bool) 방법을 사용하여 켜거나 끌 수 있습니다. 기본적으로 메커니즘은 실행됩니다.

따라서 CArrayObj 클래스를 처리하는 두 가지 옵션이 있습니다:

1. 메모리 관리 메커니즘이 사용되도록 설정되었습니다. (default)

이 경우 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;