ArrayRemove

지정된 인덱스로 시작하는 배열에서 지정된 수의 요소를 제거

bool  ArrayRemove(
   void&        array[],            // 모든 유형의 배열
   uint         start,              // 인덱스 제거를 시작
   uint         count=WHOLE_ARRAY   // 요소의 수
   );

매개변수

array[]

[in][out]  배열.

시작

[in]  배열 요소가 제거되는 시작 인덱스.

count=WHOLE_ARRAY

[in]  제거된 요소의 수. WHOLE_ARRAY 값은 배열 끝의 지정된 인덱스에서 모든 요소를 제거하는 것을 의미합니다.

반환 값

성공하면 true를, 그렇지 않으면 false를 반환. 오류에 대한 정보를 가져오려면 GetLastError() 기능을 호출. 가능한 오류:

  • 5052 – ERR_SMALL_ARRAY (너무 큰 시작 값),
  • 5056 – ERR_SERIES_ARRAY (배열을 변경할 수 없습니다, 지표 버퍼),
  • 4003 – ERR_INVALID_PARAMETER (너무 큰 카운트 값),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (소멸기가 있는 복잡한 개체를 포함하는 고정 크기 배열),
  • 4006 - ERR_INVALID_ARRAY  (소멸기가 있는 구조 또는 클래스 개체를 포함하는 고정 크기 배열).

 

참고

함수가 고정 크기 배열에 사용되는 경우 배열 크기가 변경되지 않고 나머지 "끝부분"이 시작 포지션으로 물리적으로 복사됩니다. 기능의 작동 방식을 정확하게 이해하려면 아래 예를 참조하십시오. "물리적" 복사는 복사된 개체가 생성자 또는 복사 연산자에 의해 생성되지 않음을 의미합니다. 대신 개체의 바이너리 표시가 복사됩니다. 따라서 ArrayRemove() 기능을 소멸기가 있는 개체가 포함된 고정 크기 배열에 적용할 수 없습니다 (ERR_INVALID_ARRAY 또는 ERR_STRUCT_WITHOBJECTS_ORCLASS 오류가 활성화됨). 이러한 개체를 제거할 때는 원래 개체와 해당 복사본에 대해 소멸기를 두 번 호출해야 합니다.

SetIndexBuffer() 기능으로 지표 버퍼로 지정된 동적 배열에서는 요소를 제거할 수 없습니다. 이로 인해 ERR_SERIES_ARRAY 오류가 발생합니다. 지표 버퍼의 경우 터미널의 실행 하위 시스템에 의해 모든 크키 변경 작업이 수행됩니다.

예:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 고정 크기 배열을 선언하고 값을 채우기
   int array[10];
   for(int i=0;i<10;i++)
     {
      array[i]=i;
     }
//--- 요소를 제거하기 전에 배열을 표시
   Print("ArrayRemove() 호출 전");
   ArrayPrint(array);
//--- 배열에서 요소 2개를 삭제하고 새 집합을 표시
   ArrayRemove(array,4,2);
   Print("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, ArrayCopy, ArrayResize, ArrayFree