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

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007