我可以將 std::vector 元素視為連續陣列嗎?
問題是 std::vector 中的元素是否得到保證佔用連續的記憶體位址,允許我們將其指向第一個元素的指標視為C 陣列。
歷史背景:
在 C 98 標準中,不存在這種保證。儘管如此,標準對 std::vector 的要求使得元素不太可能是不連續的。
目前標準:
但是,這個問題在C 0x(後面更名為 C 11)標準。根據修訂 C 98 標準的 TR:「向量的元素是連續儲存的」。這表示對於bool 型別以外的向量,以下情況成立:
&v[n] == &v[0] + n
其中:
範例:
因此,以下程式碼現在有效並且將如預期運作:
std::vector<int> values; // ... fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int v = array[i]; // do something with 'v' } }
以上是std::vector 元素是否保證在記憶體中連續?的詳細內容。更多資訊請關注PHP中文網其他相關文章!