Rumah > pembangunan bahagian belakang > C++ > Mengapakah `push_back` Mendapat Pembina Salin Berbilang Kali dalam Vektor?

Mengapakah `push_back` Mendapat Pembina Salin Berbilang Kali dalam Vektor?

DDD
Lepaskan: 2024-11-03 15:39:30
asal
1069 orang telah melayarinya

Why Does `push_back` Invoke the Copy Constructor Multiple Times in a Vector?

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan