class CDellArrayElement
{
public :
void DellArrayElement( int &arr[], int Start, int Count= 1 );
void DellArrayElement( int &arr[][], int size_1_dimension, int Start, int Count= 1 );
void DellArrayElement( int &arr[][][], int size_1_dimension, int size_2_dimension, int Start, int Count= 1 );
void DellArrayElement( int &arr[][][][], int size_1_dimension, int size_2_dimension, int size_3_dimension, int Start, int Count= 1 );
};
//+------------------------------------------------------------------+//| Одномерный массив |//+------------------------------------------------------------------+void CDellArrayElement::DellArrayElement( int &arr[], int Start, int Count= 1 )
{
ArrayCopy (arr, arr, Start, Start+Count);
ArrayResize (arr, ArrayRange (arr, 0 )-Count);
};
//+------------------------------------------------------------------+//| Двухмерный массив |//+------------------------------------------------------------------+void CDellArrayElement::DellArrayElement( int &arr[][], int size_1_dimension, int Start, int Count= 1 )
{
ArrayCopy (arr, arr, Start*size_1_dimension, (Start+Count)*size_1_dimension);
ArrayResize (arr, ArrayRange (arr, 0 )-Count);
};
//+------------------------------------------------------------------+//| Трёхмерный массив |//+------------------------------------------------------------------+void CDellArrayElement::DellArrayElement( int &arr[][][], int size_1_dimension, int size_2_dimension, int Start, int Count= 1 )
{
int n = size_1_dimension*size_2_dimension;
ArrayCopy (arr,arr, Start*n, (Start+Count)*n);
ArrayResize (arr, ArrayRange (arr, 0 )-Count);
};
//+------------------------------------------------------------------+//| Четырёхмерный массив |//+------------------------------------------------------------------+void CDellArrayElement::DellArrayElement( int &arr[][][][], int size_1_dimension, int size_2_dimension, int size_3_dimension, int Start, int Count= 1 )
{
int n = size_1_dimension*size_2_dimension*size_3_dimension;
ArrayCopy (arr, arr, Start*n, (Start+Count)*n);
ArrayResize (arr, ArrayRange (arr, 0 )-Count);
};
일리야의 버전을 보고 공허한 생각이었기에 확인을 하지 않았다.
두 번째 옵션은 구조로 작업하는 것입니다. 1차원 배열과 마찬가지로 구조 배열로 작업할 수 있습니다.
컴파일되지만 그다지 흥미롭지 않습니다. z[][][]는 어떻습니까?
두 번째 이상의 차원은 동적일 수 없지만 함수는 두 번째 차원의 특정 크기에 맞게 조정할 필요가 없습니다. ArrayRange()를 통해 찾을 수 있습니다.
차원 수가 함수 오버로드를 허용하지 않으면 두 번째 차원 등의 크기는 절대 허용하지 않습니다. 예, 그래서 그것은 전혀 보편적이지 않기 때문에 완전히 흥미롭지 않습니다. 다른 함수 이름으로 작성하는 것이 더 쉽습니다.
이렇게 써야 한다는 뜻인가요?
2차원에 4개의 요소가 있다면?
이렇게 써야 한다는 뜻인가요?
2차원에 4개의 요소가 있다면?
원한다면 이렇게 써도 상관없어요.
다음과 같이 될 것 같습니다.
원한다면 이렇게 써도 상관없어요.
실험할 기회가 없어서 물어봤다.
다음과 같이 될 것 같습니다.
그러면 ArrayResize가 -1이 아니라 -Count 에서 수행되어야 하는 것 같습니까?
그러면 ArrayResize가 -1이 아닌 -Count에서 수행되어야 하는 것 같죠?
응. 수정했습니다.
실험할 기회가 없어서 물어봤다.
불필요하며 과부하에 도움이 되지 않습니다.
그럼 이렇게?
사실, 이것이 요소의 제거가 아니라 첫 번째 차원에 의한 인덱스 제거임을 명확히 해야 합니다( 다차원 배열 이 전달되면 모든 "요소"는 첫 번째 차원의 인덱스 S에 의해 제거됨).불필요하며 과부하에 도움이 되지 않습니다.
도움이 되지 않는 이유는 무엇입니까?
이러한 테스트되지 않은 옵션이 작동합니까?
일리야의 버전을 보고 공허한 생각이었기에 확인을 하지 않았다.
두 번째 옵션은 구조로 작업하는 것입니다. 1차원 배열과 마찬가지로 구조 배열로 작업할 수 있습니다.
결과
일리야의 버전을 보고 공허한 생각이었기에 확인을 하지 않았다.
int &arr[] 서명이 있는 함수 에 1차원 배열 이상 을 전달할 수 없기 때문에 제대로 하지 않았습니다.