std :: vector作为原始数组

时间:2014-03-13 12:26:20

标签: c++ stl stdvector

std::vector中获取第一个元素的地址并将其用作原始数组是否安全?数据是否连续排列? c ++标准说的是什么(c++98 vs c++11)?顺便说一句,这是一种常见的做法吗?

我有一些大小可能不同的数组和函数,它将指针和元素数作为参数。使用std::vector管理数据并与my_func同时使用它会很棒。

std::vector<int> my_vector;
void my_func(int* int_ptr, int num_ints);
// ..
my_func(&my_vector[0], my_vector.size());

1 个答案:

答案 0 :(得分:5)

C ++ 11(和C ++ 03)保证 std::vector中的数据是连续的。这意味着,在您的情况下,&my_vector[0]可以被认为是指向该数组的第0个元素的指针,并且可以使用普通指针算法来访问其他元素。最好使用my_vector.data()来恢复指向第0个元素的指针。

C ++ 98 几乎保证它。

请注意,对于任何C ++标准,std::vector<bool>为true。这是因为std::vector<bool>是作为特定的专业化实现的。