2012-11-22 51 views
3

因此,據我所知,保留並不初始化抽象,而是簡單地分配空間以包含它們。然而,不應該v [0]總是給你第一個單元化的內存,不應該給它分配一個值總是工作?爲什麼vector.reserve(2)後面跟着v [0] = 2被認爲是不正確的?

+0

['reserve()'](http://en.cppreference.com/w/cpp/container/vector/reserve)更改容器['capacity'](http://en.cppreference.com/ w/cpp/container/vector/capacity),而不是['size'](http://en.cppreference.com/w/cpp/container/vector/size)。沒有構造元素,['size()'](http://en.cppreference.com/w/cpp/container/vector/size)會報告0。 – Blastfurnace

回答

9

因爲reserve不改變矢量的大小。它只會將矢量移動到內存中有足夠空間的地方,以便在必要時增加矢量的大小。

如果你想確保你可以撥打v[0]=2,甚至v[1]=0,你應該使用resize(2),而不是reserve(2)

1

因爲它調用未定義的行爲。圖書館作者可以合法地將begin()的地址保留爲nullptr,直到你調整大小。或將其設置爲0xBAADFOOD。或者在寫入時格式化您的硬盤。

現在,更可能發生的是這是未初始化的內存。因此,除了調試中的一堆斷言之外,沒有什麼可怕的事情發生,並且該向量在於它的狀態而無法修復它。

相關問題