我看到了很多:
std::vector<Something> vec;
do_something_with_vec(vec);
Something *arr=&vec[0];
do_something_that_needs_carray(arr);
我的意思是,一个向量可能会在内部使用一个数组,所以我明白为什么这个工作,我只是想知道这是否是定义的行为(比如,是一个允许运行std :: vector的实现的实现者)这会破坏。
如果标准之间存在冲突,我对C ++ 11标准所说的内容感兴趣。
答案 0 :(得分:17)
是的,如果std::vector
不为空,则允许。如果vector
为空,vec[0]
将引发未定义的行为。
std::vector
是连续存储元素所必需的。
还有data(
)方法,但它只是C ++ 11。
重要的:
这不适用于std::vector<bool>
(比特效率专门化)。但它也不是容器,IMO应该被弃用。
答案 1 :(得分:9)
没关系。但是如果vec
为空,则它是未定义的行为。如果vec.data()
为空,最好使用vec
。
答案 2 :(得分:6)
是的,这很好,因为保证元素是连续存储的。标准承认这一点:
向量的元素是连续存储的,这意味着如果
v
是vector<T, Allocator>
,其中T
是除bool
以外的某种类型,那么它就服从&v[n] == &v[0] + n
{1}}适用于所有0 <= n < v.size()
。