Keterkaitan Storan Elemen Vektor STL
Apabila bekerja dengan vektor STL, adalah penting untuk memahami susun atur memori elemennya. Soalan biasa timbul: jika vektor telah diubah saiznya, bolehkah kita dengan selamat menganggap bahawa unsur-unsurnya disimpan bersebelahan dalam ingatan?
Analisis
Piawaian C 03 (23.2 .4.1) memberikan jawapan:
The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
Dalam istilah yang lebih mudah, ini bermakna alamat elemen pertama (&v[0]) bagi vektor adalah sama dengan alamat elemen ke-nnya ( &v[n]) tambah offset bagi n. Ini terpakai kepada vektor yang mengandungi jenis data selain daripada boolean.
Contoh
Pertimbangkan kod berikut:
vector<char> vc(100); // do some stuff with vc vc.resize(200); char* p = &vc[0]; // do stuff with *p
Mengikut standard, kami boleh mengandaikan dengan selamat bahawa selepas mengubah saiz vektor, alamat yang disimpan dalam p akan memberikan akses bersebelahan kepada semua 200 elemen vektor. Ini kerana elemen vektor dijamin akan disimpan satu demi satu dalam ingatan, membolehkan traversal dan akses yang cekap.
Awas
Walau bagaimanapun, ia penting untuk ambil perhatian bahawa apabila menambah elemen pada vektor, storannya mungkin diagihkan semula. Ini boleh membatalkan sebarang penunjuk atau iterator sedia ada kepada elemen vektor, jadi penting untuk mengambil kira perkara ini apabila bekerja dengan vektor.
Atas ialah kandungan terperinci Adakah Elemen Vektor STL Kekal Berturut-turut dalam Ingatan Selepas Saiz semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!