Keterkaitan Memori std::Elemen Vektor
Pemaju yang prihatin sering menimbulkan persoalan sama ada elemen dalam std::vector dijamin untuk bersebelahan. Sifat ini menentukan sama ada dibenarkan untuk menganggap penuding kepada elemen pertama sebagai tatasusunan gaya C.
Peruntukan Standard
Pada mulanya, piawaian C 98 diabaikan untuk menentukan aspek ini. Walau bagaimanapun, laporan teknikal (TR) seterusnya membetulkan pengawasan ini, dan piawaian C 0x yang akan datang akan memasukkannya sebagai keperluan yang jelas.
Spesifikasi TR
N2798, sebuah draf daripada C 0x, postulat:
"Vektor ialah a bekas jujukan yang menyokong iterator capaian rawak ... Unsur-unsur vektor disimpan secara bersebelahan, bermakna jika v ialah vektor dengan T ialah beberapa jenis selain bool, maka ia mematuhi identiti &v[n] == &v[0] n untuk semua 0 <= n < v.size()."
Contoh
Berdasarkan spesifikasi ini, pertimbangkan coretan kod berikut:
std::vectorvalues; // ... fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int v = array[i]; // do something with 'v' } } Jaminan standard C bahawa kod ini akan berfungsi seperti yang dimaksudkan dengan membenarkan akses memori terus kepada elemen vektor.
Atas ialah kandungan terperinci Adakah std::vector Element Memory Bersebelahan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!