2008-10-29 81 views

回答

71

是的,這是一個有效的假設(*)。

從C++ 03標準(23.2.4.1):

向量的元素被存儲 連續,這意味着如果v是 向量,其中T是一些 類型比其它bool,那麼它服從 身份& v [n] == & v [0] + n對於 全部0 < = n < v.size()。

(*)...但注意在向其添加元素後重新分配陣列(使任何指針和迭代器無效)。

+1

+1如果您使用的是標準草案,或任何尚未批准和正式的,請說出來。在目前的標準中我找不到那樣的東西。 – 2009-01-13 21:49:02

2

是的。

應該總是支持連續

10
+0

的鏈接到C++ FAQ – 2010-02-26 11:06:01

+0

-1中的鏈接作爲回答 – 2012-12-02 10:54:26

13

存儲始終是連續的,但作爲載體的容量發生變化,也可能會移動。

如果您在容量更改操作之前在元素零(或任何元素)上有指針,引用或迭代器,則它將失效並且必須重新分配。

4

std::vector保證項目存儲在一個連續的數組中,因此是數組的首選替代,也可用於與平臺相關的低級代碼(如Win32 API調用)進行接口。爲了得到一個指向數組使用:

&myVector.front(); 
27

C++ 03標準添加了措辭以明確矢量元素必須是連續的。

C++ 03 23.2.4段1包含下列語言是不是C++ 98標準文件中

一個vector的元素被存儲 連續,這意味着如果vvector<T, Allocator>其中T是 某種類型比bool等,那麼它 服從所有0 <= n < v.size()身份&v[n] == &v[0] + n

在他的博客條目之一這種變化香草薩特會談,Cringe not: Vectors are guaranteed to be contiguous

...連續性是在 矢量抽象的事實部分。其實很重要, ,當發現 那個C++ 98標準沒有完全保證連續性時,修改了 C++ 03標準,明確加了保證。

相關問題