SORU
19 EYLÜL 2008, Cuma


Neden std::kullanmak std stack::varsayılan olarak deque?

Tek operasyonları bir kap içinde kullanılmak üzere gerekli beri yığını

  • () geri
  • () push_back
  • () pop_back

Neden bunun için varsayılan kapsayıcı bir vektör yerine bir deque?

Deque adetle sınırla ön önce unsurları bir tampon vermek() yok ki push_front() verimli bir operasyon mu? Elemanları hiç bir bağlamda kullanılır beri boşa bu yığın değil mi?

Eğer bir vektör yerine bir deque bu yolu kullanarak yükü ise yok, neden priority_queue için varsayılan bir vektör bir deque de değil mi? (priority_queue ön gerektirir () ve push_back(), pop_back() - yığın esas olarak aynı)


Cevaplara göre aşağıda güncelleme:

Genellikle uygulanan deque şekilde sabit boyutlu bir dizi değişken boyutlu bir dizi olduğu görülüyor. Bu daha hızlı bir vektör daha büyüyen yapar tahsisat ve kopyalama gerektiren), ekleme hakkında yığını ve kaldırma elemanları gibi bir şey için, deque muhtemelen daha iyi bir seçimdir.

priority_queue her kaldırma ve ekleme pop_heap çalıştırmak için gerektirir gibi ağır dizin oluşturma gerektirir, () veya push_heap(). Bu büyük olasılıkla bir parçasıdır hala sabit zaten amorti ekleyerek bu yana vector daha iyi bir seçim yapar.

CEVAP
19 EYLÜL 2008, Cuma


Konteyner büyüdükçe, bir vektör için bir tahsisat yeni bellek bloğu içine tüm öğeleri kopyalama gerektirir. Bir deque büyüyen yeni bir blok ayırır ve blok listesine bağlantılar - hayır kopya gerekmektedir.

Tabii ki Eğer isterseniz farklı bir arka kap kullanılması gerektiğini belirtebilirsiniz. Eğer çok büyümek için gitmiyor musun yığını varsa, Eğer tercihinizi eğer bir vektör yerine bir deque kullanmak söyle.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Keith Anthe

    Keith Anthe

    26 NİSAN 2011
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012
  • Monica Catral

    Monica Catra

    12 NİSAN 2009