Saya punya vector<CustomClass*>
dan saya meletakkan banyak item dalam vektor dan saya perlu akses cepat, jadi saya tidak menggunakan daftar. Bagaimana cara mengatur ukuran awal vektor (misalnya menjadi 20.000 tempat, jadi untuk menghindari salinan ketika saya memasukkan baru)?
130
std::vector
referensi apa pun , tergantung mana yang sesuai dengan kebutuhan Anda dengan lebih baik.std::vector
dalam judul?Jawaban:
atau:
Yang pertama menetapkan ukuran sebenarnya dari array - yaitu, membuatnya menjadi vektor 20.000 pointer. Yang terakhir meninggalkan vektor kosong, tetapi cadangan ruang untuk 20.000 pointer, sehingga Anda dapat memasukkan (hingga) banyak tanpa harus realokasi.
Setidaknya dalam pengalaman saya, cukup tidak biasa bagi keduanya untuk membuat perbedaan besar dalam kinerja - tetapi keduanya dapat mempengaruhi kebenaran dalam beberapa keadaan. Secara khusus, selama tidak ada realokasi, iterator ke dalam vektor dijamin tetap valid, dan begitu Anda telah mengatur ukuran / ruang yang dipesan, Anda dijamin tidak akan ada realokasi apa pun selama Anda tidak t meningkatkan ukuran lebih dari itu.
sumber
whatever[10000] = somepointer;
, di mana yang terakhir mengharuskan Anda untukpush_back
setiap pointer yang Anda tambahkan. Setidaknya jika Anda terbiasavector
, yang terakhir mungkin lebih sederhana dan lebih alami.reserve
, yang mengalokasikan sebelumnya ukuran memori. Secara teori, pengaturan ukuran masih bisa lebih cepat, karena juga menghindari penambahan ukuran saat ini setiap kali Anda menambahkan item. Pada kenyataannya, saya ragu Anda bisa mengukurnya.Anda perlu menggunakan fungsi cadangan untuk mengatur ukuran yang dialokasikan awal atau melakukannya di konstruktor awal.
atau
Ketika Anda
reserve()
elemen,vector
akan mengalokasikan ruang yang cukup untuk (setidaknya?) Yang banyak elemen. Elemen-elemen tidak ada di dalamvector
, tetapi memori siap digunakan. Ini kemudian mungkin akan mempercepatpush_back()
karena memori sudah dialokasikan.sumber
std::vector<Custom Class*> content(100);
)