2014-03-13 43 views
1

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

我有一些数组的大小可能会有所不同,它的功能是将指针和元素数作为参数。用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()); 

回答

5

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

C++ 98 差不多保证吧。

请注意,对于任何C++标准,它是而不是对于std::vector<bool>为真。这是因为std::vector<bool>是作为一个特殊的专业实施。

+0

“差不多”?你能添加一个报价吗? –

+2

为了填补空白,C++ 03改变了它在C++ 98中的保证。 – chris

+0

你能链接参考吗? :) – Theolodis

相关问题