MQL4 ve MQL5'te Rakamları () atlayarak herhangi bir sayıdan (sadece tırnak işaretleri değil) sonra ondalık basamak sayısını alma - sayfa 16

 

İşte başka bir ilginç zorluk: dizi sıralama işlevini yerleşik ArraySort'tan daha hızlı hale getirmek.

 
Ilya Malev :
 sizeof (S)/ sizeof (T)

Ve ne, tüm yapıların boyutlarının tüm değişkenlerin boyutlarına bölünmesi garanti edilir mi?

 struct SZ{
   char x1;
   char x2;
   char x3;   
};

Print ( sizeof (SZ)/ sizeof ( int )); // 0
 
fxsaber :

Bir dizi yapıyı (uzunluk, sizeof(int)'nin katıdır) bir int[] ve geri dizisine çevirmenin hızlı bir uygulaması hakkında beyin fırtınası yapabilir miyim?

///

Yapıyı tanımladıktan hemen sonra, bu yapıyı ve bir diziyi içeren bir birleşim ile birkaç satır daha yazıyoruz.

 struct SS{
   int a;
   double b;
};

union UX{
   SS s;
   char a[ sizeof (S)];
};


Her yapıdan sonra yazmanız bile gerekmez, ancak bir şablon kullanabilirsiniz - bu herkes için daha uygundur.

 
Dmitry Fedoseev :

Ve ne, tüm yapıların boyutlarının tüm değişkenlerin boyutlarına bölünmesi garanti edilir mi?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4 ve MQL5'te Rakamları () atlayarak herhangi bir sayıdan (sadece tırnak işaretleri değil) sonra ondalık basamak sayısını alma

fxsaber , 2018.12.07 15:12

Bir dizi yapıyı ( uzunluk, sizeof(int)'nin katıdır ) bir int[] dizisine ve geriye çevirmenin hızlı bir uygulaması hakkında beyin fırtınası yapabilir miyim?

Genel durumda, çözüm aynı bağlantıdadır, ancak çok yönlülük nedeniyle frenler vardır. Bu nedenle, çokluk oldukça anlaşılır ekleyin. koşul.

Ayrıca ortaya çıktı

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 platformunun yeni versiyonu 1930 yapımı: MQL5'te kayan grafik pencereleri ve .Net kitaplıkları

MetaQuotes Yazılım A.Ş. , 2018.10.25 17:18

  1. MQL5: Yapılar için Pack(integer_value) özelliği eklendi. Yapı içindeki alanların konumunun hizalamasını ayarlamanıza olanak tanır, bu bazen bir DLL ile çalışırken gereklidir. Tamsayı_değeri için olası değerler 1, 2, 4, 8 ve 16'dır.
    Özellik tanımlı değilse, varsayılan 1 baytlık toplamadır - paket(1).

    Kullanım örneği:
     //+------------------------------------------------------------------+
    //| Default packing                                                  |
    //+------------------------------------------------------------------+
    struct A
      {
       char               a;
       int                b;
      };
    //+------------------------------------------------------------------+
    //| Specified packing                                                |
    //+------------------------------------------------------------------+
    struct B pack( 4 )
      {
       char               a;
       int                b;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart ()
      {
       Print ( "sizeof(A)=" , sizeof (A));
       Print ( "sizeof(B)=" , sizeof (B));
      }
    //+------------------------------------------------------------------+
    Çözüm:
    sizeof(A)=5
    sizeof(B)=8
    Yapılarda hizalama hakkında daha fazla bilgi MSDN'de mevcuttur.
 
Dmitry Fedoseev :

Yapıyı tanımladıktan hemen sonra, bu yapıyı ve bir diziyi içeren bir birleşim ile birkaç satır daha yazıyoruz.

Her yapıdan sonra yazmanız bile gerekmez, ancak bir şablon kullanabilirsiniz - bu herkes için daha uygundur.

anlamadım Katılmak isterseniz, lütfen kendi versiyonunuzu yazın.

 
fxsaber :

Bir dizi yapıyı (uzunluk, sizeof(int)'nin katıdır) bir int[] ve geri dizisine çevirmenin hızlı bir uygulaması hakkında beyin fırtınası yapabilir miyim?

neden int'de? ve bir büyüde değil mi?

(ve uzun daha uzun olacak - daha hızlı kopyalanacak)

 
Ilya Malev :

seninki daha hızlı sanki :)

 // Перевод массива тиков в массив int[].
int TicksToIntArray_fxsaber3( const MqlTick &Ticks[], int &Array[] )
{
  INTEGER< MqlTick > TickInteger;

   const int Size = ArraySize (Ticks);
   ArrayResize (Array, Size * sizeof ( MqlTick ) / sizeof ( int ));
  
   int j = 0 ;

   for ( int i = 0 ; i < Size; i++)
  {
    TickInteger.Data = Ticks[i];

//    j += ArrayCopy(Array, TickInteger.Integer, j);
     for ( int k = 0 ; k < sizeof ( MqlTick ) / sizeof ( int ); k++)
      Array[j++] = TickInteger.Integer[k];
  }

   return (j);
}

// Перевод массива int[] в массив тиков.
int IntArrayToTicks_fxsaber3( const int &Array[], MqlTick &Ticks[] )
{
  INTEGER< MqlTick > TickInteger = { 0 };

   const int Size = ArraySize (Array);
   ArrayResize (Ticks, Size * sizeof ( int ) / sizeof ( MqlTick ));
  
   int j = 0 ;

   for ( int i = 0 ; i < Size; j++)
  {
//    i += ArrayCopy(TickInteger.Integer, Array, 0, i, sizeof(MqlTick) / sizeof(int));
     for ( int k = 0 ; k < sizeof ( MqlTick ) / sizeof ( int ); k++)
      TickInteger.Integer[k] = Array[i++];

    Ticks[j] = TickInteger.Data;
  }

   return (j);
}


Çok hızlandırmaya çalışacağım.

 
fxsaber :

anlamadım Katılmak isterseniz, lütfen kendi versiyonunuzu yazın.

Yani yazdı .

 
fxsaber :

Genel durumda, çözüm aynı bağlantıdadır, ancak çok yönlülük nedeniyle frenler vardır. Bu nedenle, çokluk oldukça anlaşılır ekleyin. koşul.

Ayrıca ortaya çıktı

Bu çeşitliliği kim kontrol edecek?

Neden: