Rumah >pembangunan bahagian belakang >C++ >Cara Mengurangkan Kapasiti Berlebihan dalam std::vector: Trik Swap Dijelaskan

Cara Mengurangkan Kapasiti Berlebihan dalam std::vector: Trik Swap Dijelaskan

Patricia Arquette
Patricia Arquetteasal
2024-10-26 22:57:03264semak imbas

How to Reduce Excess Capacity in a std::vector: The Swap Trick Explained

Cara Mengurangkan Kapasiti dengan Berkesan dalam std::vector

Jika anda mendapati diri anda mempunyai std::vector yang mempunyai kapasiti berlebihan, anda mungkin tertanya-tanya sama ada terdapat cara untuk mengecilkan saiznya untuk mengosongkan ingatan. Walaupun tiada kaedah langsung untuk ini, terdapat teknik pintar yang dikenali sebagai "helah pertukaran."

Helah Pertukaran

Menurut Item 17 dari Scott Meyers' Effective STL, anda boleh menggunakan helah swap untuk memangkas lebihan kapasiti daripada vektor. Begini cara ia berfungsi:

<code class="cpp">vector<Person>(persons).swap(persons);</code>

Selepas melakukan pertukaran ini, vektor bernama "orang" akan "mengecilkan untuk muat", bermakna kapasitinya akan dikurangkan supaya sepadan dengan bilangan elemen yang terkandung di dalamnya.

Cara Trik Berfungsi

Helah ini mengambil kesempatan daripada fakta bahawa pembina salinan vektor hanya memperuntukkan jumlah memori yang diperlukan untuk elemen yang disalin. Dengan mencipta vektor baharu dengan bilangan elemen yang sama dengan vektor asal, pembina salinan mencipta vektor baharu dengan kapasiti yang lebih kecil.

Kaedah swap kemudian menukar kandungan dan kapasiti vektor asal dan baharu. Akibatnya, vektor asal dibiarkan dengan kapasiti yang dikurangkan.

Atas ialah kandungan terperinci Cara Mengurangkan Kapasiti Berlebihan dalam std::vector: Trik Swap Dijelaskan. 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