2016-10-23 17 views
7

C++ adlı bir sayfa var.C++'yu verimli bir şekilde nasıl temizleyebilirim?

stack<string> pages; 
//here is some operation 
//now clearing the stack 
while(!pages.empty()) 
    pages.pop(); 

Şimdi benim sorum: yığını temizlemek için daha iyi bir etkili yol yoktur Bir yığın temizlemek için net() fonksiyonu var gibi , ben aşağıdaki kodu yazdım? Şimdiden teşekkürler.

+5

Yığına boş bir yığın atamayı denediniz mi? – krzaq

+0

Hayır, öneriniz için teşekkürler (y) –

+0

Çalıştı, teşekkürler. –

cevap

12

Genellikle kopyaları imha etmeniz gerektiğinden, O (1) içindeki kapsayıcıları kopyalayamazsınız. Temperlenmiş bir kopyalama kabının, (1) zamanında, içerilen nesnelerin tipinin önemsiz bir yıkıcıya sahip olduğunu gösteren bir özellik tarafından tetiklenen bir kısmi uzmanlığa sahip olabileceği düşünülebilir.

Döngüden kaçınmak istiyorsanız.

pages=stack<std::string>(); 

veya

stack<std::string>().swap(pages); 
8

Ben daha verimli bir yolu yoktur sanmıyorum. Yığın, bir LIFO bağlamında çalışmak üzere özel olarak tasarlanmış ve aynı anda boşaltılmak üzere tasarlanmamış iyi tanımlanmış bir veri türüdür. Bunun için temel olarak alttaki kaplar olan vector veya deque (veya list) kullanabilirsiniz; Bir stack aslında bir kap adaptördür. Daha fazla bilgi için lütfen bu C++ Reference'a bakın.

Başka bir seçeneğiniz yoksa ve yığma kullanmak zorundaysanız, yaptığınız gibi yanlış bir şey yoktur. Her iki şekilde de, eğer inşa edilmişlerse, yeni bir boş yığın atadığınızda ya da tüm öğeleri dışarı çıkardığınızda ya da her neyse, elemanlar imha edilmelidir.

Bunun yerine vector kullanmanızı öneririm;

  • Sadece daha uygun
  • olduğunu açıkça

  • boş
  • push_back
  • pop_back geri
    • boyutunu (veya yeniden boyutlandırma): Eğer gerçekten ihtiyaç faaliyet göstermektedir Böylece clear yöntemini kullanabilirsiniz. vector kullanmanın gerçekten daha performanslı olduğundan emin değilsiniz; yığın işlemleri temelde aynıdır.

  • İlgili konular