Kedua fungsi itu melakukan hal yang sangat berbeda!
The resize()
Metode (dan melewati argumen konstruktor setara dengan itu) akan memasukkan atau menghapus jumlah yang sesuai elemen untuk vektor untuk membuat ukuran itu diberikan (memiliki argumen kedua opsional untuk menentukan nilai mereka). Ini akan mempengaruhi size()
, iterasi akan membahas semua elemen itu, push_back akan menyisipkan setelah mereka dan Anda dapat langsung mengaksesnya menggunakan operator[]
.
The reserve()
Metode hanya mengalokasikan memori, tapi daun itu uninitialized. Itu hanya mempengaruhi capacity()
, tetapi size()
tidak akan berubah. Tidak ada nilai untuk objek, karena tidak ada yang ditambahkan ke vektor. Jika Anda kemudian memasukkan elemen, tidak ada realokasi yang akan terjadi, karena sudah dilakukan sebelumnya, tetapi itulah satu-satunya efek.
Jadi itu tergantung apa yang Anda inginkan. Jika Anda ingin array 1000 item default, gunakan resize()
. Jika Anda ingin array yang ingin Anda masukkan 1000 item dan ingin menghindari beberapa alokasi, gunakan reserve()
.
EDIT: Komentar Blastfurnace membuat saya membaca pertanyaan itu lagi dan menyadari, bahwa dalam kasus Anda, jawaban yang benar adalah jangan mengalokasikan secara manual. Terus masukkan elemen di akhir sesuai kebutuhan. Vektor akan secara otomatis dialokasikan kembali sesuai kebutuhan dan akan melakukannya dengan lebih efisien daripada cara manual yang disebutkan. Satu-satunya kasus yang reserve()
masuk akal adalah ketika Anda memiliki perkiraan ukuran total yang cukup tepat yang Anda perlukan dengan mudah tersedia sebelumnya.
EDIT2: Edit pertanyaan iklan: Jika Anda memiliki taksiran awal, maka reserve()
taksiran itu. Jika ternyata tidak cukup, biarkan vektor melakukan itu.
std::vector
.