2013-04-14 45 views

回答

3

不,它贏了沒有任何發生:在大多數情況下,向量的實現基於數組(這幾乎是向量的概念),儘管這不是在語言規範中設置的。無論如何,矢量的動態特性排除了數據結構中內聯的任何形式的序列,即。由vector類管理的元素序列不能在vector類中,但必須是位於其他位置的內存塊,並且在類中有一個指針。

因此,您的數據類型與指向動態數組的指針的動態數組類似。重新分配一個指向的數組不會對指針數組產生影響。

6

不會。這不會導致在table重新分配。

table上調用的唯一操作符/函數是[]運算符,該運算符承諾固定時間。如果發生重新分配,這將違反固定時間的承諾。

爲什麼你可以改變子向量的矢量大小(table[i] s)而不需要在頂層向量中分配額外的空間是矢量的存儲是通過一個指向內存塊的指針來管理的。因此,增加矢量使用的元素的數量並不會實際改變矢量對象的大小。

table[i].size()更改時未更改sizeof(table[i])

+0

你能解釋一下爲什麼? – Martinsos

1

不,因爲table的內容不變 - 它仍然包含與以前完全相同的實例。只需要存儲table[i]需要重新分配。 vector包含一個指向存儲器的指針 - 矢量對象的大小始終相同,只有被引用的數組可以增長或縮小。因此,table [i]沒有增長,如果這就是你要求的 - 只有它指向的數組是。

1

否。調用vector的元素的方法不會影響vector本身。

請考慮以下調用:parent_object.child_object.Method(),其中child_object對parent_object一無所知。 Method()不能改變parent_object的狀態。

矢量矢量也是如此。 (從技術上講,在這裏你正在存儲一個指向數組的指針,調整一個子數組的大小是本地操作,並且改變了適當的指針,但不會改變父數組的大小。)

1

不,那不可能發生。resize不改變矢量對象 –它僅改變該載體管理動態存儲的大小。因此從外部矢量的點,所有的元件保持不變(與具有相同的,小尺寸)。