Memahami Perbezaan: std::vector::resize() vs. std::vector::reserve()
Topik of std::vector::reserve() vs. std::vector::resize() telah mencetuskan perbincangan dalam komuniti pengaturcaraan. Artikel ini bertujuan untuk menjelaskan peranan tersendiri mereka dalam manipulasi vektor.
std::vector::reserve()
std::vector::reserve() memperuntukkan memori untuk bilangan elemen yang ditentukan tetapi tidak mengubah saiz vektor itu sendiri. Vektor mengekalkan saiz logik asalnya. Kaedah ini bermanfaat apabila anda menjangkakan menambah elemen pada vektor dan ingin mengoptimumkan prestasi dengan praperuntukan memori.
std::vector::resize()
std: :vector::resize() mengubah suai saiz vektor kepada bilangan elemen yang ditentukan. Jika vektor perlu dikembangkan, ia akan memperuntukkan memori tambahan. Tidak seperti reserve(), resize() memulakan sebarang elemen baharu kepada nilai lalainya.
Contoh Penggunaan
Pertimbangkan kod yang disediakan dalam soalan:
void MyClass::my_method() { my_member.reserve(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
Menurut respons, menggunakan reserve() di sini adalah tidak betul. Untuk menulis elemen dengan betul pada vektor, seseorang harus menggunakan resize():
void MyClass::my_method() { my_member.resize(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
Visual Studio 2010 SP1 Behavior
Gelagat "terhempas" kod yang disebutkan dalam Visual Studio 2010 SP1 adalah konsisten dengan tingkah laku yang betul yang diterangkan dalam respons. Percubaan untuk mengakses elemen melebihi saiz logik vektor (dalam kes ini, my_member[5]) sebelum mengubah saiz vektor menghasilkan gelagat yang tidak ditentukan.
Rizab dan Pembatalan
Adalah penting untuk ambil perhatian bahawa menggunakan reserve() dan kemudian menambah elemen melalui push_back() boleh membatalkan rujukan, iterator, atau penunjuk kepada data dalam vektor. Ini kerana reserve() memperuntukkan memori tanpa mengubah saiz, dan apabila elemen baharu ditambah, ia mungkin diletakkan di lokasi yang berbeza.
Kesimpulannya, std::vector::reserve() dan std::vector ::resize() mempunyai tujuan yang berbeza. Reserve() praperuntukkan memori, manakala resize() mengubah suai saiz vektor dan memulakan elemen baharu. Memahami perbezaan mereka adalah penting untuk manipulasi vektor yang cekap.
Atas ialah kandungan terperinci std::vector::reserve() vs. std::vector::resize(): Bilakah Saya Harus Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!