Dalam C , vektor STL menyediakan tatasusunan dinamik yang mengubah saiz secara automatik apabila elemen ditambah atau dialih keluar. Walau bagaimanapun, satu persoalan biasa timbul: adakah selamat untuk mengandaikan bahawa elemen vektor sentiasa disimpan bersebelahan dalam ingatan?
Untuk menangani kebimbangan ini, pertimbangkan senario berikut:
vector<char> vc(100); // Perform operations on vc vc.resize(200); char* p = &vc[0]; // Conduct operations using *p
Persoalannya ialah, bolehkah kita dengan pasti mengakses seluruh elemen vektor secara berurutan dalam ingatan menggunakan alamat elemen pertama (*p) selepas mengubah saiz vektor?
Jawapan: Ya, andaian itu sah.
Menurut piawaian C 03 (23.2.4.1), storan bersebelahan dijamin untuk vektor:
"Unsur vektor disimpan secara bersebelahan, bermakna jika v ialah vektor dengan T ialah beberapa jenis selain daripada bool, maka ia mematuhi identiti &v[n] == &v[0] n untuk semua 0 <= nIni membayangkan bahawa alamat memori berikutnya elemen dalam vektor boleh dikira dengan menambah alamat elemen pertama dengan saiz jenis elemen. Dalam erti kata lain, unsur-unsur disimpan dalam cara linear.
Nota Penting:
Walaupun storan bersebelahan dijamin, adalah penting untuk diingat bahawa vektor mungkin perlu diperuntukkan semula semasa operasi penambahan, yang boleh membatalkan sebarang petunjuk dan iterator. Oleh itu, adalah penting untuk mempertimbangkan kemungkinan ini apabila bekerja dengan penunjuk kepada elemen vektor.
Atas ialah kandungan terperinci Adakah Vektor STL Dijamin Menyimpan Elemen Bersebelahan dalam Ingatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!