Rumah > pembangunan bahagian belakang > C++ > std::vector::reserve() vs. std::vector::resize(): Bilakah Saya Harus Menggunakan Yang Mana?

std::vector::reserve() vs. std::vector::resize(): Bilakah Saya Harus Menggunakan Yang Mana?

Mary-Kate Olsen
Lepaskan: 2024-12-29 13:04:22
asal
320 orang telah melayarinya

std::vector::reserve() vs. std::vector::resize(): When Should I Use Which?

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;
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan