首頁 > 後端開發 > C++ > std::vector 元素是否保證在記憶體中連續?

std::vector 元素是否保證在記憶體中連續?

DDD
發布: 2024-12-26 05:35:38
原創
767 人瀏覽過

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

我可以將 std::vector 元素視為連續陣列嗎?

問題是 std::vector 中的元素是否得到保證佔用連續的記憶體位址,允許我們將其指向第一個元素的指標視為C 陣列。

歷史背景:

在 C 98 標準中,不存在這種保證。儘管如此,標準對 std::vector 的要求使得元素不太可能是不連續的。

目前標準:

但是,這個問題在C 0x(後面更名為 C 11)標準。根據修訂 C 98 標準的 TR:「向量的元素是連續儲存的」。這表示對於bool 型別以外的向量,以下情況成立:

&v[n] == &v[0] + n
登入後複製

其中:

  • v 是向量
  • n 是0 和v.size () 之間的索引 - 1

範例:

因此,以下程式碼現在有效並且將如預期運作:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板