Rumah > pembangunan bahagian belakang > C++ > Bilakah `std::vector` Mengungguli Tatasusunan Mentah dalam C ?

Bilakah `std::vector` Mengungguli Tatasusunan Mentah dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-20 10:38:12
asal
686 orang telah melayarinya

When Does `std::vector` Outperform Raw Arrays in C  ?

Vektor lwn. Tatasusunan: Keanehan Prestasi

Dalam C , penggunaan tatasusunan telah tidak digalakkan memihak kepada std::vectors. Walau bagaimanapun, sejauh mana perbezaan prestasi sering dipersoalkan.

Mengelakkan Tatasusunan C

Garis panduan semasa mencadangkan mengelakkan tatasusunan C yang diperuntukkan baharu, kerana ia memerlukan penjejakan manual dan pemadaman. Selain itu, penggunaan tatasusunan pada tindanan adalah tidak digalakkan kerana kekurangan semakan julat dan kehilangan maklumat saiz semasa penukaran penunjuk. Dalam kes sedemikian, std::array disyorkan, menyediakan fungsi saiz dan iterator.

std::Vector vs. Native Arrays

Penemuan empirikal mendedahkan bahawa pengindeksan asas, penyahrujukan, dan operasi kenaikan pada vektor berprestasi sama dengan tatasusunan/penunjuk yang sepadan. Analisis kod pemasangan mengesahkan kesetaraan ini (lihat coretan kod di bawah).

int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing

int vector_index(S &s) { return s.v[3]; } // Same assembly code
Salin selepas log masuk
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing

int iterator_deref(S &s) { return *s.i; } // Identical assembly code
Salin selepas log masuk
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment

void iterator_increment(S &s) { ++s.i; } // Same assembly code
Salin selepas log masuk

Pengecualian: Kelebihan Prestasi Tatasusunan Baharu yang Diperuntukkan

Satu pengecualian kepada kesetaraan prestasi adalah untuk tatasusunan baru yang diperuntukkan yang mengandungi objek bukan kelas atau kelas tanpa pembina yang ditentukan pengguna. Dalam kes ini, tatasusunan yang diperuntukkan baharu boleh memberikan kelebihan berbanding std::vectors, kerana std::vectors memulakan elemen kepada nilai lalai (cth., 0 untuk int) pada pembinaan.

Atas ialah kandungan terperinci Bilakah `std::vector` Mengungguli Tatasusunan Mentah dalam C ?. 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