SORU
13 EYLÜL 2011, Salı


Vektör arasında seçim::resize() ve vector::reserve()

Pre-ayırma vector Bir üye değişkeni için bazı hafıza ediyorum. Aşağıdaki kodu en az bir parçası

class A {
  vector<string> t_Names;
public:
  A () : t_Names(1000) {}
};

Şimdi, Eğer t_Names.size() bir noktada eşittir 1000. 100 boyutunu artırmak niyetindeyim. Sonra 1100, tekrar 100 artırmak ve böylece ulaşır.

Benim sorum vector::resize() vector::reserve() arasında seçim yapmak. Bu tür senaryosu daha iyi bir seçenek var mı ?

Edit: t_Names için yerinde bir tahmin çeşit var. 700 12 ** olarak ölçtüm. Ancakbelli(nadir) durumlar, daha 1000 daha da büyüyebilir.

CEVAP
13 EYLÜL 2011, Salı


İki işlevi bir şeyleri farklı yapmak oldukça büyük.

resize() yöntem (ve geçen tartışmaya yapıcı eşdeğerdir o) eklemek veya silmek uygun sayıda öğeleri ile vektör için verilen boyutu (isteğe bağlı ikinci bağımsız değişkeni için belirttiğiniz değer). ** 15, yineleme tüm bu öğeler, push_back onlardan sonra ekler üzerine gidecek ve onları doğrudan erişim operator[] kullanarak etkileyecektir.

reserve() Bu yöntem sadece bellek ayırır, ama başlatılmamış bırakır. Sadece* *18, ama size() değişmeden olacak etkiler. Hiçbir şey vektör eklenir çünkü nesneler için değeri yok. Daha sonra öğeler eklerseniz, hiçbir tahsisat önceden yapıldı, çünkü olur, ama bu sadece bir etkidir.

İstediğin şeye bağlı. Eğer 1000 varsayılan öğeleri bir dizi istiyorsanız, resize() kullanın. Eğer hangi Ekle 1000 öğeleri bekliyoruz ve ayırma birkaç önlemek için bir dizi istiyorsanız, reserve() kullanın.

DÜZENLEME:Blastfurnace yorum soruyu tekrar okuyun ve sizin durumunuzda doğru cevap olduğunu fark ettiyok önceden ayır etmeyinel ile. Sadece ihtiyacınız olan elementleri ekleme sonunda tutun. Vektör gerektiğinde otomatik olarak yeniden tahsis edecek ve bunu yapacağızdaha fazladaha verimli bir manuel şekilde bahsetti. reserve() mantıklı yalnızca önceden kolayca kullanılabilir ihtiyacınız olacak toplam boyutu oldukça yerinde bir tahmin var.

EDİT2:Reklam soru edit: Eğer ilk tahmin Varsa, reserve() daha tahmin ediyoruz ve eğer yeterli olduğu ortaya çıkarsa, sadece vektör yapayım öyle bir şey.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • pucksz

    pucksz

    24 Mart 2006
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009