Verilen eleman(lar)ın bir dizisini temizleme - sayfa 4

 
Evet... Mükemmelliğin sınırı yoktur.
 

Mdya ... Programlamadan gelen canavarlar ...

Şahsen, sırasıyla en anlaşılır ve aynı zamanda verimli kod olan @Dmitry Fedoseev ile aynı şeyi yazardım ve hız yaklaşık aynı olurdu.

@Nikolai Semko'dan gelen kodu oldukça ciddi bir sapkınlık, ancak gerekli bir sapkınlık olarak görüyorum. Ve yol her milisaniye olduğunda - doğru ve uygun.

 
Georgiy Merts :

Mdya ... Programlamadan gelen canavarlar ...

Şahsen, sırasıyla en anlaşılır ve aynı zamanda verimli kod olan @Dmitry Fedoseev ile aynı şeyi yazardım ve hız yaklaşık aynı olurdu.

@Nikolai Semko'dan gelen kodu oldukça ciddi bir sapkınlık, ancak gerekli bir sapkınlık olarak görüyorum. Ve yol her milisaniye olduğunda - doğru ve uygun.

Bu durumların her ikisinde de aynı öğenin birden çok sürüklenmesi olmasını sevmiyorum. Bu, çoğu durumda en yavaş olan pop-up baloncuk yöntemine göre sıralama ile bir benzerlik hissi uyandırır. SUDB'de yapılanları yapmak daha kolay, daha net ve daha güvenilirdir: öğeler silinmek üzere işaretlenir (aynı zamanda kaç tane işaretlendiğini sayarız), ardından işaretlenmemiş tümü (bir kez) ile yeni bir kopyaya aktarılır. kalan dizi öğesi sayısı. Bellek açısından bakıldığında, bu yalnızca bayrak dizisi ("silinmek üzere işaretlenmiş") için ek alan alacaktır ve dizinin ikinci, azaltılmış kopyası, orijinal kopyayla birlikte, olduğundan daha fazla bellek gerektirmeyecektir. bir ArrayResize için gerekli. Ayrıca, bir değer değil, bir dizi silinirse, her zaman tüm değerleri üzerinden geçmemek için işaretlemeyi hızlandırabilirsiniz. Bunu yapmak için, içindeki maksimum ve minimumu tanımlayın (bu, dizeler için de mümkündür) ve minimumdan küçük veya maksimumdan büyük öğeleri işaretlemeden atlayın.

 
Dmitry Fedoseev :

son zamanlarda bu konuda olduğu gibi periyodik olarak bir su birikintisinde oturuyorsunuz)

Vladimir Pastuşak :

uygulamanı göster

pazarlamacı zaten en uygun olduğunu düşündüğüm bir varyant yazdı, döngü için boyutu çıkarmak dışında onu kopyalamanın bir anlamı görmüyorum
 
Dmitry Fedoseev :

Bu daha iyi:

En iyi seçenek, hız ölçümleri bunu doğrulamalıdır.
 
TheXpert :

son zamanlarda bu konuda olduğu gibi periyodik olarak bir su birikintisinde oturuyorsunuz)

pazarlamacı zaten en uygun olduğunu düşündüğüm bir seçenek yazdı, yinelemede bir anlam görmüyorum

Ah, doğru, doktora tezinden çaktı...

 
Vladimir :

Bu durumların her ikisinde de aynı öğenin birden çok sürüklenmesi olmasını sevmiyorum.

Her iki durumda da her öğe en fazla bir kez sürüklenir.
 
TheXpert :
Birinde 42 ürün, diğerinde 6, üçüncüde 30 ürün var. Böyle soru ve cevaplarla içinde ne olduğunu hayal etmeye korkuyorum.

"Uzman" güzeldir! Seyirciyi ateşledi, tılsımı ortaya çıkardı Marketa :-)) Uzman olmayabilirim ama kişisel olarak Dmitry Fedoseev hakkında kesinlikle katılmıyorum ...

 
Denis Kirichenko :

ama kişisel olarak Dmitry Fedoseev hakkında kesinlikle katılmıyorum ...

empoze etmem.

 
Eh, tamamen eldeki görevle ilgili. Değeri kaldırın ve boşaltın
 template < typename T>
int arrayFilter(T &data[], const T value)
{
     int s, d = s = ArraySize (data);
     
     for ( int i=d- 1 ; i>= 0 ; i--)
          if (data[i] == value || data[i] == NULL )
          {
               s--;
               for ( int j=i; j<s; j++)
                    data[j]=data[j+ 1 ];
          }
  
     if (d > s)
           ArrayResize (data, s);
     
     return s;
}

void OnStart ()
{
     long array[] = { 1 , 2 , 3 , 6 , 9 , 5 , 6 , 3 , 25 , ,, 6 , 8 , NULL , 7 , NULL , 4 };
     Print ( arrayFilter< long >(array, 3 ) );
}
Neden: