Nasıl verimli bir şekilde C 11 Standart Kütüphane bir kap tercih edebilir miyim? | Netgez.com
SORU
22 Mayıs 2012, Salı


Nasıl verimli bir şekilde C 11 Standart Kütüphane bir kap tercih edebilir miyim?

İyi bilinen bir imaj var, adı "C Kap seçimi". Bir akış şeması istedi kullanımı için en iyi kap seçin.

Kimse yok mu zaten C 11 versiyonu varsa biliyor mu?

Bir önceki de bu: eC   Container choice

CEVAP
22 Mayıs 2012, Salı


Bildiğim kadarıyla, ancak yapılabilir sözel olarak değil sanırım. Ayrıca, grafik list genel olarak çok iyi bir kapsayıcı olmadığından biraz kapalı, ve de forward_list; Her iki listede niş uygulamaları için çok özel kaplar vardır.

Böyle bir grafik oluşturmak için, sadece iki basit kurallar gerekir:

  • Anlambilim ilk seçim
  • ÇeÅŸitli seçenekleri mevcut olduÄŸunda, en basit

Performans ilk başta genellikle işe yaramaz endişesi, büyük O sadece bir kaç bin (veya daha fazla) öğe işleme başlattığınızda devreye.

Konteynerlerin iki büyük kategoriye ayrılır:

  • İliÅŸkilendirilebilirkaplar: find bir operasyon var
  • Basit Bir Dizikaplar

ve o zaman bunların üzerine birkaç adaptörleri inşa edebilirsiniz: , *, *5stackqueue. Adaptörleri burada bırakıyorum, yeterince tanınabilir uzman.


Soru 1:İlişkilendirilebilir?

  • Kolayca aramak gerekiyorsabiranahtar, çaÄŸrışımsal konteyner gerekir
  • EÄŸer öğeleri sıralanmış olması gerekiyorsa, o zaman sipariÅŸ iliÅŸkilendirilebilir bir kapsayıcı gerekir
  • Aksi takdirde, soru 2 için Atlama.

Soru 1.1:Emretti?

  • EÄŸer belirli bir düzen varsa, kullanın unordered_ konteyner, aksi takdirde geleneksel sipariÅŸ muadili kullanın.

Soru 1.2:Ayrı Bir Anahtar?

  • EÄŸer anahtar deÄŸeri ayrıdır, ** 7, aksi takdirde kullanım set kullanın

Soru 1.3:Çoğaltır?

  • EÄŸer çiftleri tutmak istiyorsanız, multi, baÅŸka bir kullanın.

Örnek:

Benzersiz bir KİMLİĞİ onlarla ilişkili olan birkaç kişi var varsayalım, ve onun KİMLİĞİ bir kişi veri almak için sadece mümkün olduğunca istiyorum.

  1. find bir işlevi, böylece ilişkilendirilebilir bir kapsayıcı istiyorum

    1.1. Daha az sipariş, unordered_ bir konteyner böylece beni zerre kadar ilgilendirmiyor

    1.2. Benim anahtar (ID) map bir böylece ile ilişkilidir değeri ayrıdır

    1.3. KİMLİĞİ Ankara'da sürünme gerekir, böylece benzersizdir.

Son cevap: std::unordered_map<ID, PersonData>.


Soru 2:Bellek kararlı?

  • EÄŸer öğeleri bellek (, konteynırın deÄŸiÅŸtirildiÄŸinde hareket deÄŸil yani) istikrarlı olmalıdır, o zaman list bazı kullanın
  • Aksi takdirde, söz konusu 3 atlamak.

Soru 2.1:Hangi?

  • list; forward_list bir küçük bellek ayak izi için faydalı olur razı.

Soru 3:Dinamik olarak bulunur?

  • EÄŸer konteyner bilinen bir boyutu (derleme zamanında)vebu boyutta bir program sırasında deÄŸiÅŸmiÅŸ olacakveöğeleri varsayılan constructibleyatam baÅŸlatma listesi ({ ... } sözdizimini kullanarak) saÄŸlamak, array bir kullanabilirsiniz. C-dizisi geleneksel, ama kullanışlı fonksiyonlar ile deÄŸiÅŸtirir.
  • Aksi halde, söz konusu 4 atlamak.

Soru 4:Çift uçlu?

  • EÄŸer hem önde hem de arkada öğeleri kaldırmak mümkün olmak istiyorsanız, o zaman ** 19, aksi takdirde vector Bir, bir.

İlişkilendirilebilir bir kapsayıcı ihtiyacın yoksa, varsayılan olarak, seçtiğiniz vector unutmayın.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Bokeh

    Bokeh

    9 HAZİRAN 2014
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006