8

我经常看到这个:

std::vector<Something> vec;
do_something_with_vec(vec);
Something *arr=&vec[0];
do_something_that_needs_carray(arr);

我的意思是,一个向量可能会在内部使用一个数组,所以我明白为什么会这样,我只是想知道这是否是定义的行为(比如,一个实现者是否允许运行 std::vector 的实现,这将休息)。

如果标准之间存在冲突,我对 C++11 标准所说的内容感兴趣。

4

3 回答 3

17

是的,如果std::vector不为空,则允许。如果vector为空,vec[0]将引发未定义行为。

std::vector需要连续存储元素。

还有data() 方法,但它只是 C++11。

重要的:

这不适用于std::vector<bool>(位高效的专业化)。但它也不是一个容器,IMO 它应该被弃用。

于 2012-12-21T19:54:02.783 回答
9

那也行。但如果vec为空,则为未定义行为。更好地使用vec.data()它也可以在vec为空的情况下使用。

于 2012-12-21T19:54:22.253 回答
6

是的,这很好,因为保证元素是连续存储的。该标准承认这一点:

向量的元素是连续存储的,这意味着如果v是 a vector<T, Allocator>whereT是 以外的某种类型bool,则它服从&v[n] == &v[0] + n所有的标识0 <= n < v.size()

于 2012-12-21T19:54:08.607 回答