SORU
28 NİSAN 2009, Salı


C kullanımına & döngü optimizasyonu

Bu gibi c kodu bir sürü görüyorum

for( const_iterator it = list.begin(),
     const_iterator ite = list.end();
     it != ite;   it)

Daha kısa versiyonu aksine:

for( const_iterator it = list.begin();
     it != list.end();   it)

Bu iki toplantı arasında hız olarak hiçbir fark olmayacak mı? Safça ilk liste bu yana biraz daha hızlı olacak.() son bir kez çağrılır. Ama yineleyici sabit olduğundan, derleyici bu test çemberin dışında, her iki emsal Kurul oluşturma çekecek gibi görünüyor.

CEVAP
28 NİSAN 2009, Salı


İki sürümleri aynı değildir. İkinci versiyonu list.end() karşı yineleyici her zaman karşılaştırır ve list.end() veren ne döngü boyunca değişebilir. Şimdi elbette değiştiremezsiniz list ile const_iterator it; ama hiçbir şey engel kod içinde döngü sadece arama yöntemleri list doğrudan ve mutasyona uğradığını, hangi olabilir (bağlı olarak ne tür bir veri yapısı list) değişim sonunda yineleyici. Bu nedenle artık doğru son ne zaman yineleyici olabilir, çünkü bazı durumlarda hatalı son yineleyici önceden saklamak için olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009
  • nemoking of kinges

    nemoking of

    4 EYLÜL 2009