在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());
答案 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>
是作为特定的专业化实现的。