2014-03-13 78 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

相關問題