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 &v[n] == &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中文網其他相關文章!