İki işlev çok farklı şeyler yapar!
resize()
(Kendi değerini belirlemek için isteğe bağlı ikinci bir argüman) yöntemi (ve yapıcısına argüman geçen eşdeğerdir) ekler veya vektöre elemanların silme uygun sayıda bu verilen boyuta getirmek için. Bunu etkileyecek size()
, yineleme tüm bu öğelerin üzerinden geçecek, push_back onlardan sonra eklenecek ve operator[]
.
reserve()
Yöntem yalnızca bellek ayırır, ancak yapraklar o başlatılmamış. Yalnızca etkiler capacity()
, ancak size()
değişmeyecektir. Vektöre hiçbir şey eklenmediği için nesneler için bir değer yoktur. Daha sonra öğeleri eklerseniz, önceden yapıldığından yeniden tahsis olmayacaktır, ancak tek sonuç budur.
Yani ne istediğine bağlı. 1000 varsayılan öğe dizisi istiyorsanız, kullanın resize()
. 1000 öğe eklemeyi beklediğiniz bir dizi istiyorsanız ve birkaç ayırmadan kaçınmak istiyorsanız, kullanın reserve()
.
DÜZENLEME: Blastfurnace'in yorumu, soruyu tekrar okumama ve sizin durumunuzda doğru cevabın manuel olarak önceden tahsis edilmediğini anlamamı sağladı . İhtiyacınız olan öğeleri sonuna kadar eklemeye devam edin. Vektör gerektiğinde otomatik olarak yeniden tahsis edecek ve bunu belirtilen manuel yoldan daha verimli bir şekilde yapacaktır . reserve()
Mantıklı olduğu tek durum , önceden kolayca erişebileceğiniz toplam boyut için makul ölçüde kesin bir tahminde bulunmanızdır.
DÜZENLEME2: Reklam sorusu düzenleme: İlk tahmininiz varsa, o zaman reserve()
bu tahmininiz. Yeterli olmadığı ortaya çıkarsa, bırakın vektör bir şeyi yapsın.
std::vector
.