Adakah Vektor STL Dijamin Menyimpan Elemen Bersebelahan dalam Ingatan?

DDD
Lepaskan: 2024-11-25 10:21:11
asal
554 orang telah melayarinya

Are STL Vectors Guaranteed to Store Elements Contiguously in Memory?

Memastikan Storan Bersebelahan dalam Vektor STL

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
Salin selepas log masuk

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 <= n

Ini 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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan