Soalan ini, yang telah ditanya sebelum ini, menangani isu khusus yang dihadapi oleh ramai pengaturcara semasa bekerja dengan std ::vektor. Ia mencari kaedah untuk mengecilkan kapasiti vektor, mengurangkan lebihan peruntukan memori selepas kandungannya dikurangkan.
Jawapan:
Penyelesaian yang disyorkan, seperti yang dicadangkan dalam STL Berkesan oleh Scott Meyers (Item 17), adalah menggunakan "helah pertukaran" untuk mengurangkan kapasiti berlebihan. Kaedah ini melibatkan penciptaan vektor baharu dengan kapasiti berkurangan yang diingini dan menukar kandungannya dengan vektor asal.
<code class="cpp">vector<Person>(persons).swap(persons);</code>
Selepas melakukan pertukaran ini, vektor asal, kini kosong, akan diagihkan dan salinan baharu akan mengambil tempatnya dengan kapasiti berkurangan yang sangat sesuai untuk kandungan semasanya.
Prinsip Dasar:
Teknik ini memanfaatkan aspek utama pembina salinan vektor tingkah laku. Apabila menyalin elemen daripada vektor, vektor baharu hanya memperuntukkan memori yang mencukupi untuk menampung elemen yang disalin, tanpa mengira kapasiti vektor asal. Dengan menukar vektor baharu yang dikecilkan dengan yang asal, kapasiti berlebihan dipangkas dengan berkesan.
Atas ialah kandungan terperinci Cara Mengecilkan Kapasiti `std::vector`: \'Tipu Pertukaran\' Diterangkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!