我看到了很多:
std::vector<Something> vec;
do_something_with_vec(vec);
Something *arr=&vec[0];
do_something_that_needs_carray(arr);
Run Code Online (Sandbox Code Playgroud)
我的意思是,一个向量可能会在内部使用一个数组,所以我明白为什么这个工作,我只是想知道这是否是定义的行为(比如,是一个实现者是否允许运行std :: vector的实现,这将是打破).
如果标准之间存在冲突,我对C++ 11标准所说的内容感兴趣.
mil*_*bug 17
是的,如果std::vector不是空的话是允许的.如果vector为空,vec[0]将引发未定义的行为.
std::vector 需要连续存储元素.
还有data()方法,但它只是C++ 11.
重要:
这不会起作用std::vector<bool>(比特效率专门化).但它也不是容器,IMO应该被弃用.
是的,它很好,因为保证元素连续存储.标准承认这一点:
一个向量的元素被存储连续的,这意味着如果
v是一个vector<T, Allocator>其中T一些类型比其它bool,那么它遵循身份&v[n] == &v[0] + n所有0 <= n < v.size().
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |