因此,據我所知,保留並不初始化抽象,而是簡單地分配空間以包含它們。然而,不應該v [0]總是給你第一個單元化的內存,不應該給它分配一個值總是工作?爲什麼vector.reserve(2)後面跟着v [0] = 2被認爲是不正確的?
3
A
回答
9
因爲reserve
不改變矢量的大小。它只會將矢量移動到內存中有足夠空間的地方,以便在必要時增加矢量的大小。
如果你想確保你可以撥打v[0]=2
,甚至v[1]=0
,你應該使用resize(2)
,而不是reserve(2)
。
1
因爲它調用未定義的行爲。圖書館作者可以合法地將begin()的地址保留爲nullptr,直到你調整大小。或將其設置爲0xBAADFOOD。或者在寫入時格式化您的硬盤。
現在,更可能發生的是這是未初始化的內存。因此,除了調試中的一堆斷言之外,沒有什麼可怕的事情發生,並且該向量在於它的狀態而無法修復它。
相關問題
- 1. 爲什麼2 + 1&0結果是0?
- 2. void * v []; v [i] = v [j];爲什麼這是正確的?
- 3. 爲什麼認爲深度超過2時認爲不好?
- 4. 爲什麼2 /// 2在Javascript中是2?
- 5. 爲什麼這些2個charecters£¬並沒有被正確解碼
- 6. 什麼是返回2不是0?
- 7. 爲什麼變量y是0,不是2?
- 8. 什麼被認爲是遍歷LDAP DIT的正確方法?
- 9. MySQL按順序排列,爲什麼1000被認爲小於2?
- 10. 爲什麼從基數10轉換爲基數2被認爲是慢?
- 11. 'num_of_cmt'是4而不是2。爲什麼?
- 12. 爲什麼它認爲screenWidth/2是屏幕的最右側?
- 13. 爲什麼這段代碼不確定,但不是2?
- 14. 這個Ruby Kata爲什麼會返回0而不是2?
- 15. 爲什麼是Calendar.current.firstWeekday == 2?
- 16. 爲什麼是1 -2
- 17. 爲什麼`(['1','2','3'])。map(parseInt)`得不到正確的結果?
- 18. 爲什麼'\\'被認爲是int?
- 19. 2 ** 2和2 ** 0的「Algn」在objdump的輸出中意味着什麼?
- 20. 爲什麼2 * Integer.MAX_VALUE = -2?
- 21. 爲什麼將[2..3..10]被解釋爲[2; 5; 8]
- 22. 爲什麼下面的代碼打印「0 1 2 3」?
- 23. 字節 - 2然後下一次+2不起作用...爲什麼?
- 24. 爲什麼不會選擇2個事件正確觸發?
- 25. 爲什麼jQuery.length == 2?
- 26. Mac OSX? Linux呢? X?侏儒? KDE?爲什麼osx被認爲是linux,爲什麼它不被認爲是linux?
- 27. 爲什麼Redis被認爲是CP?
- 28. 爲什麼-2?爲什麼不是-3或-1?
- 29. 爲什麼meta刷新後跟2個重定向?
- 30. 爲什麼被認爲是最後的手段
['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