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

  • fireflame65

    fireflame65

    27 Mart 2007
  • Helen Bradley

    Helen Bradle

    4 Mart 2008
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011