2008-10-29 55 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标准,明确加了保证。

相关问题