Derlenecek, ancak çok ilginç değil, peki ya z[][][]?
İkinci ve daha yüksek boyutlar dinamik olamaz, ancak işlevin ikinci boyutun belirli boyutuna uyarlanması gerekmez, bunu ArrayRange() aracılığıyla bulabilirsiniz.
Boyut sayısı işlevin aşırı yüklenmesine izin vermiyorsa, ikincisinin boyutu vb. kesinlikle buna izin vermeyecektir. Evet ve bu yüzden tamamen ilginç değil, çünkü hiç de evrensel değil. Farklı fonksiyon isimleri ile yazmak daha kolaydır.
Bu, böyle yazılması gerektiği anlamına mı geliyor?
void z( int size_second_dimension, int & z[] [ 4 ] , int shift){};
Doğru, bunun bir öğenin kaldırılması değil, dizinin ilk boyut tarafından kaldırılması olduğunu açıklığa kavuşturmamız gerekiyor ( çok boyutlu bir dizi iletilirse, o zaman tüm "öğeler" ilk boyutun S indeksi tarafından kaldırılır).
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);
};
İlya'nın versiyonunu gördüm ve boş bir fikir olduğu için kontrol etmedim.
İkinci seçenek yapılarla çalışmaktır. Tek boyutlu bir dizide olduğu gibi bir dizi yapıyla çalışabilirsiniz.
Derlenecek, ancak çok ilginç değil, peki ya z[][][]?
İkinci ve daha yüksek boyutlar dinamik olamaz, ancak işlevin ikinci boyutun belirli boyutuna uyarlanması gerekmez, bunu ArrayRange() aracılığıyla bulabilirsiniz.
Boyut sayısı işlevin aşırı yüklenmesine izin vermiyorsa, ikincisinin boyutu vb. kesinlikle buna izin vermeyecektir. Evet ve bu yüzden tamamen ilginç değil, çünkü hiç de evrensel değil. Farklı fonksiyon isimleri ile yazmak daha kolaydır.
Bu, böyle yazılması gerektiği anlamına mı geliyor?
ikinci boyutta 4 element varsa?
Bu, böyle yazılması gerektiği anlamına mı geliyor?
ikinci boyutta 4 element varsa?
İstersen böyle yaz, kusura bakma.
Şu şekilde olacak gibi görünüyor:
İstersen böyle yaz, kusura bakma.
Deneme imkanı olmadığı için sordum.
Görünüşe göre şöyle olacak:
O zaman ArrayResize'ın -1'de değil -Count'ta yapılması gerekiyor gibi görünüyor, değil mi?
O zaman ArrayResize'ın -1'de değil -Count'ta yapılması gerekiyor gibi görünüyor, değil mi?
Evet. Düzeltildi.
Deneme imkanı olmadığı için sordum.
Gereksizdir ve aşırı yüklenmeye yardımcı olmaz.
Sonra böyle mi?
Doğru, bunun bir öğenin kaldırılması değil, dizinin ilk boyut tarafından kaldırılması olduğunu açıklığa kavuşturmamız gerekiyor ( çok boyutlu bir dizi iletilirse, o zaman tüm "öğeler" ilk boyutun S indeksi tarafından kaldırılır).Gereksizdir ve aşırı yüklenmeye yardımcı olmaz.
Neden yardım etmeyecek?
Böyle denenmemiş bir seçenek işe yarar mı?
İlya'nın versiyonunu gördüm ve boş bir fikir olduğu için kontrol etmedim.
İkinci seçenek yapılarla çalışmaktır. Tek boyutlu bir dizide olduğu gibi bir dizi yapıyla çalışabilirsiniz.
Sonuç
İlya'nın versiyonunu gördüm ve boş bir fikir olduğu için kontrol etmedim.
Doğru yapmadılar çünkü int &arr[] imzalı bir fonksiyona 1 boyutlu diziden fazlasını geçirmek mümkün olmayacak.