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

  • Google Chrome

    Google Chrom

    1 EYLÜL 2008
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006
  • UberFacts

    UberFacts

    26 EKİM 2013