Berbilang Seruan Pembina Salin dalam Tekan Belakang Vektor
Dalam coretan yang diberikan, kaedah tolak_balik myints objek vektor memanggil salinan pembina lebih daripada dua kali, bercanggah dengan jangkaan awal. Ini menimbulkan persoalan tentang tingkah laku dalaman vektor.
Penjelasan:
Tekan Belakang Pertama:
- A elemen baru dimasukkan ke dalam vektor menggunakan x. Ini mencetuskan satu operasi salinan: Permulaan elemen baharu menggunakan hujah. Oleh kerana pembina lalai x memulakan my_int kepada sifar, pembina salin melaporkan sifar.
Tekan Balik Kedua dan Alokasi Semula:
- Elemen kedua ialah push_back'd. Walau bagaimanapun, kapasiti vektor melebihi, memerlukan pengagihan semula. Memandangkan Myint tidak mempunyai pembina langkah tersirat, pembina salinan digunakan sebaliknya.
- Elemen pertama disalin ke dalam ingatan baharu, mengekalkan nilai sifarnya. Selepas itu, x disalin untuk memulakan elemen kedua dengan my_int ditetapkan kepada satu, seperti yang ditunjukkan dalam output pembina salinan.
- Ini menghasilkan tiga jumlah seruan pembina salinan.
Bilangan Invokasi:
- Bilangan panggilan pembina salinan boleh berbeza-beza dengan pelaksanaan yang berbeza disebabkan kapasiti vektor awal. Walau bagaimanapun, dua panggilan adalah minimum.
- Peruntukan semula boleh dielakkan, justeru mengurangkan operasi penyalinan, dengan meningkatkan kapasiti vektor terlebih dahulu menggunakan rizab(2).
Mengurangkan Operasi Salin:
- Sebagai alternatif, kaedah emplace_back boleh digunakan untuk memasukkan elemen. Ia tidak memerlukan salinan atau pergerakan, memajukan terus hujah kepada pembina elemen.
Ringkasnya, kaedah push_back boleh menghasilkan seruan pembina salinan berbilang disebabkan penstrukturan semula vektor dalaman. Untuk mengelakkan ini, reserve() boleh digunakan untuk meningkatkan kapasiti atau emplace_back boleh digunakan untuk pemasukan elemen yang cekap tanpa salinan.
Atas ialah kandungan terperinci Mengapakah `push_back` Mendapat Pembina Salin Berbilang Kali dalam Vektor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn