Vektörlerin farklı anlama gelen iki "uzunluk" özelliği vardır:
size
vektördeki kullanılabilir elemanların sayısıdır. Bu, sakladığınız şeylerin sayısıdır. Bu kavramsal bir uzunluktur.
capacity
vektörün şu anda ayırdığı bellek miktarına kaç öğenin sığacağıdır.
capacity >= size
her zaman doğru olmalı, ama onların her zaman eşit olmaları için hiçbir sebep yok. Örneğin, bir öğeyi kaldırdığınızda, ayırmayı küçültmek, bir kova daha küçük yeni bir ayırma oluşturmayı ve geri kalan içeriği ("ayır, taşı, serbest") taşımayı gerektirir.
Benzer şekilde, capacity == size
bir öğe ekler ve eklerseniz, vektör ayırmayı bir öğe (başka bir "ayırma, taşıma, serbest" işlemi) ile büyütebilir, ancak genellikle birden fazla öğe eklersiniz. Kapasitenin artırılması gerekiyorsa, vektör kapasitesini birden fazla eleman artıracaktır, böylece her şeyi tekrar hareket ettirmeden önce birkaç eleman daha ekleyebilirsiniz.
Bu bilgi ile sorunuza cevap verebiliriz:
std::vector<T>::resize()
dizinin boyutunu değiştirir . Geçerli boyutundan daha küçük bir boyutta yeniden boyutlandırırsanız, fazla nesneler yok edilir. Geçerli boyutundan daha büyük yeniden boyutlandırırsanız, sonuna eklenen "yeni" nesneler varsayılan olarak başlatılır.
std::vector<T>::shrink_to_fit()
kapasitenin mevcut boyuta uyacak şekilde değiştirilmesini ister . (Uygulamalar bu talebi yerine getirebilir veya vermeyebilir . Kapasiteyi azaltabilir, ancak boyuta eşit yapamazlar. Hiçbir şey yapamayabilirler.) İstek yerine getirilirse, bu, vektörün tahsisi. Bunu genellikle bir vektör oluşturmayı bitirdiğinizde kullanırsınız ve ona asla başka bir öğe eklemezsiniz. (Kaç tane öğe ekleyeceğinizi önceden biliyorsanız, std::vector<T>::reserve()
herhangi bir öğe eklemeden önce herhangi bir öğeye güvenmek yerine vektörü anlatmak daha iyi olur shrink_to_fit
.)
Bu nedenle , vektörde kavramsal olarak ne kadar şey olduğunuresize()
değiştirmek için kullanırsınız .
Sen kullanmak shrink_to_fit()
vektör içten ayırdı aşırı boşluk en aza indirmek için olmadan kadar malzeme vektör içinde kavramsal olarak nasıl değişiyor.