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
İ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.
MEF arasında seçim ve MAF (Sistemi.Ekl...
Ne'fark tüm Seçim Dedirtiyor aras...
Arasında seçim std::map ve std::unorde...
Nasıl protobuf-bulunan-liman arasında ...
Nasıl Semafor ve SemaphoreSlim arasınd...