2011-09-30 60 views
2

可能重複:
Are std::vector elements guaranteed to be contiguous?C++向量總是連續的嗎?

我所遇到的人們使用C++中的向量來接收或MPI操作發送的數據,因爲它被認爲存儲元件連續的技術在記憶中。

但是,我仍然懷疑這種方法對於任何大小的向量是否仍然健壯,特別是當向量增長到一定大小時,這種假設可能會失效。

下面是我所談論的例子:

MPI_Recv(&partials[0] , partials.size() , mpi_partial , 0, 
     DALG_ELIMINATE_REQ_MSG ,MPI_COMM_WORLD , &status); 
+7

有什麼問題?您希望我們幫助您解決的問題究竟是什麼? –

+1

^我只是喜歡這樣的回覆。總是讓你感覺到你正在被警察訊問:P – Sadique

+0

我感覺他沒有閱讀問題標題,並依賴於問題描述。 – Ayjay

回答

5

是的,C++向量總是連續的,無論大小。

,這並不意味着,當你縮小或擴大他們,他們不走動的記憶...

1

基本上是這樣。我所知道的所有實現都是,標準要求向量具有O [1]查找,這基本上需要連續的內存塊。

標準「你不應該依賴實現細節」免責聲明。

+1

它明確要求矢量實際上使用continguous佈局。 – sellibitze

3

C++的工作草案(www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf)表示在23.4.1:

一個矢量的元素是指如果v是 其中T是除bool以外的某種類型的向量,則其對於所有的0 < v = 0 < v [n] == & v [n] = n 尺寸()。