SORU
3 Ocak 2009, CUMARTESİ


Vektör üzerinde yineleme C

C bir vektör içinde dolaşmak doğru yolu nedir ?

Bu iki kod parçaları düşünün, bu gayet iyi çalışıyor:

for (unsigned i=0; i < polygon.size(); i  ) {
    sum  = polygon[i];
}

ve bu:

for (int i=0; i < polygon.size(); i  ) {
    sum  = polygon[i];
}

warning: comparison between signed and unsigned integer expressions oluşturur.

Ben yeni dünya C , unsigned değişken görünüyor biraz korkutuyor beni ve biliyorum unsigned değişkenleri tehlikeli olabilir kullanır ve bu doğru, bu doğru mu?

CEVAP
3 Ocak 2009, CUMARTESİ


Geriye Doğru Yineleme

this answer bkz.

İleri Yineleme

Bu hemen hemen aynıdır. Sadece kullanımına değişim / artış oranında indirim takas. Kullanımına tercih edilmelidir. Bazı insanlar senin dizin değişken türü olarak std::size_t kullansın. Ancak, bu taşınabilir değil. Her zaman kullanın size_type typedef konteyner (Süre kaçabilecek tek bir dönüşüm içinde ileriye doğru yineleme durumda, olabilir aslında ters giden yol şeklinde geriye doğru yineleme dava kullanırken std::size_t, kasa std::size_t daha da fazlası nedir typedef size_type):

Std::vector kullanarak

Kullanımına kullanma

for(std::vector<T>::iterator it = v.begin(); it != v.end();   it) {
    /* std::cout << *it; ... */
}

Adını bilmediğiniz önemli, her zaman kullanımına öneki artış şeklinde kullanın. Bu kodu mümkün olduğunca genel çalıştırır sağlayacaktır.

Endeksleri kullanarak

for(std::vector<int>::size_type i = 0; i != v.size(); i  ) {
    /* std::cout << someVector[i]; ... */
}

Dizileri kullanarak

Kullanımına kullanma

for(element_type* it = a; it != (a   (sizeof a / sizeof *a)); it  ) {
    /* std::cout << *it; ... */
}

Endeksleri kullanarak

for(std::size_t i = 0; i != (sizeof a / sizeof *a); i  ) {
    /* std::cout << a[i]; ... */
}

sizeof yaklaşım ama verim ne kadar geriye doğru yineleme yanıt okuyun.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • gsipek

    gsipek

    20 Temmuz 2007
  • jcortes187

    jcortes187

    24 Mart 2006