Bir diziden bir eleman nasıl kaldırılır (tek boyutlu iki boyutlu)? - sayfa 4

 
Dmitry Fedoseev :

Hangi yöntemler? İmzalar neler?

Herhangi bir yöntem.

 
Ilya Malev :

Herhangi bir yöntem.

Peki ya bu?

 
Dmitry Fedoseev :

Evet, tek boyutlu olarak çalışıyoruz. Veri yapısının açıklamasıyla uğraşmanıza gerek yok - her şeyi bir satırda olduğu gibi arka arkaya okuyoruz.

 
ArrayCopy() işaretçilerle çalışır.
 
Dmitry Fedoseev :

Peki ya bu?

Aynı ada sahip (örneğin, ArrayRemove), farklı boyutlardaki diziler için aynı şekilde tanımlanmış (bir MQL derleyici geliştiricisi değilseniz) bir işlev (örneğin, bir öğeyi kaldırma) tanımlayamazsınız.

Ayrıca birden fazla çağrı seçeneğini aşırı yükleyerek aynı isimde böyle bir fonksiyon tanımlayamazsınız.

Şu şekilde yazmalısın:

ArrayRemove(var&[],int)

ArrayRemove2(var&[][],int)

ArrayRemove3(var&[][][],int)

ArrayRemove4(var&[][][][],int)

Bu nedenle, onları kullanan sınıfların her birinde tüm dizi işlevlerini yeniden tanımlamak istemiyorsanız, çok boyutlu bir diziyle tek boyutlu bir dizi olarak çalışmak anlamsızdır.

 
İyi tamam
 
Ilya Malev :

Aynı ada sahip (örneğin, ArrayRemove), farklı boyutlardaki diziler için aynı şekilde tanımlanmış (bir MQL derleyici geliştiricisi değilseniz) bir işlev (örneğin, bir öğeyi kaldırma) tanımlayamazsınız.

Ayrıca birden fazla çağrı seçeneğini aşırı yükleyerek aynı isimde böyle bir fonksiyon tanımlayamazsınız.

Şu şekilde yazmalısın:

ArrayRemove(var&[],int)

ArrayRemove2(var&[][],int)

ArrayRemove3(var&[][][],int)

ArrayRemove4(var&[][][][],int)

Bu nedenle, onları kullanan sınıfların her birinde tüm dizi işlevlerini yeniden tanımlamak istemiyorsanız, çok boyutlu bir diziyle tek boyutlu bir dizi olarak çalışmak anlamsızdır.

Evet. Ama öyle bir sorun değil.

 
Ilya Malev :

Aynı ada sahip (örneğin, ArrayRemove), farklı boyutlardaki diziler için aynı şekilde tanımlanmış (bir MQL derleyici geliştiricisi değilseniz) bir işlev (örneğin, bir öğeyi kaldırma) tanımlayamazsınız.

Ayrıca birden fazla çağrı seçeneğini aşırı yükleyerek aynı isimde böyle bir fonksiyon tanımlayamazsınız.

Şu şekilde yazmalısın:

ArrayRemove(var&[],int)

ArrayRemove2(var&[][],int)

ArrayRemove3(var&[][][],int)

ArrayRemove4(var&[][][][],int)

Bu nedenle, onları kullanan sınıfların her birinde tüm dizi işlevlerini yeniden tanımlamak istemiyorsanız, çok boyutlu bir diziyle tek boyutlu bir dizi olarak çalışmak anlamsızdır.

İlya, programlamadan görev belirlemeye gidiyorsun.

Geri sürün, tersini yapın.

Torunum zaten uyuyor, aksi takdirde MT'nin hafızasındaki dizinin elemanlarının sürekli olarak yer aldığı gerçeğine dikkatinizi çekerdi.

 
Алексей Тарабанов :

MT belleğindeki dizinin elemanları bitişiktir.

Ve bunun görevle ne ilgisi olduğunu düşünüyorsunuz (bir görev sınıfı - işlevler aracılığıyla farklı boyutlardaki dizilerle birleşik çalışma)?

 

Örneğin, boyutundan bağımsız olarak diziden bir öğeyi kaldırmak için bir işlev yapmak istiyorsunuz. Veya farklı boyutlardaki dizilerle çalışan bir sınıf yapmak istiyorsunuz. Bunu mql'de yapabileceğini düşünüyor musun?