首頁 >後端開發 >C++ >調整大小後,STL 向量元素在記憶體中是否保持連續?

調整大小後,STL 向量元素在記憶體中是否保持連續?

Susan Sarandon
Susan Sarandon原創
2024-11-16 07:26:03579瀏覽

Do STL Vector Elements Remain Consecutive in Memory After Resizing?

STL 向量元素的儲存連續性

使用 STL 向量時,了解其元素的記憶體佈局至關重要。出現一個常見問題:如果向量已調整大小,我們可以安全地假設其元素連續儲存在記憶體中嗎?

分析

C 03 標準(23.2 .4.1) 提供了答案:

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 &amp;v[n] == &amp;v[0] + n for all 0 <= n < v.size().

簡單來說,這意味著向量的第一個元素(&v[0]) 等於其第n 個元素(&v[n]) 的位址加上n 的偏移量。這適用於包含布林值以外的資料類型的向量。

範例

考慮以下程式碼:

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p

根據標準,我們可以放心地假設,調整向量大小後,儲存在p 中的位址將提供對向量的所有200 個元素的連續存取向量。這是因為向量的元素保證被依序儲存在記憶體中,從而實現高效的遍歷和存取。

注意

但是,這一點很重要需要注意的是,當向向量添加元素時,其存儲可能會被重新分配。這可能會使指向向量元素的任何現有指標或迭代器無效,因此在使用向量時必須考慮這一點。

以上是調整大小後,STL 向量元素在記憶體中是否保持連續?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn