2012-08-04 172 views
0

的內部我有一個C++向量:C++指針浮子矢量

 vector<float> floats; 

後來,這種載體被初始化。我不知道矢量容器的內部內容是什麼,但我想知道是否有可能返回一個指向浮點數組的地方的指針。具體而言,我使用的是CUDA,我需要將指針傳遞給一組浮點數。我無法通過它的矢量。有沒有一種方法,我可以這樣做

float *dapointer = &vector[0]; 

或這樣的事情?我希望能夠寫它,以及像

dapointer[some index] = 4; 

我知道這違反了向量的點,但該矢量在程序其他許多地方用於「向量的目的」,但我需要CUDA才能夠訪問數據。我不想改變我所有的其他代碼來使用數組而不是矢量。

+2

你的第一行是完全正確的。由於運算符'[]'包含解引用,因此你的第二個需要丟失前導'*'。 – 2012-08-04 16:06:02

+0

您仍然需要固定由矢量分配的主機內存(危險),使用cudaMemcpy將內容複製到GPU緩衝區,或者定義自己的std :: vector分配器,該分配器始終引腳內存。如果內存數組很大,那麼最好的方法是複製你所在的數組部分。 – 2012-08-04 22:46:47

回答

0

該方法應該工作,但要小心。修改矢量後,可能會留下懸掛指針。非const對矢量無效迭代器執行的操作,指向其管理的內存的指針&。在安全的方法是標記矢量const

+0

什麼「第二種方法」。第一個返回指針。我需要讀取GPU上的浮動向量,我只能將指針傳遞給浮點數組。 – Tommy 2012-08-04 16:11:00

+0

@Tommy我會使用第一種方法**,但**標記向量'const'。 – 2012-08-04 16:12:42

+0

@Tommy我看,錯過。 – 2012-08-04 16:13:34

0

如上所述,您的第一行是這樣做的一種方式。但是,如果載體不是至少大小1,那麼該線是不確定的。

1
float *dapointer = &floats[0]; 

都是好的。

(注意如何好笑運算符重載ambiguates C'S指針語法...)

+0

爲什麼這兩個降價? – 2012-08-04 16:12:57

+0

我也想知道你爲什麼得到兩個坦言0o – 2012-08-04 16:14:54

+0

@Anubis先生真的還是諷刺嗎? (對不起,我真的不能決定) – 2012-08-04 16:16:12