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
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing int iterator_deref(S &s) { return *s.i; } // Identical assembly code
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment void iterator_increment(S &s) { ++s.i; } // Same assembly code
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!