[問題] vector<T>元素的位址關係跟陣列的不同

看板C_and_CPP作者時間12年前 (2013/06/06 02:22), 編輯推噓1(108)
留言9則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCBXE 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 傳遞二維vector時,利用一維的pointer來指向vector 在function裡使用時,是否由於不同維度的vector記憶體不一定連續? 導致pointer在offset的時候沒有移動到正確的位置? //補充 因為要在BCB下使用CUDA,所以我function是寫在.cu 然後包成dll 在用BCB呼叫 CUDA好像不能用stl vector 所以我才會用pointer去指向vector 餵入的資料(Input): vector < vector <int> > a; a.resize(10); for( int i=0; i<a.size(); i++ ) { a[i].resize(10); } compute(&a[0][0]); cout << a[2][2]; //不等於1 void compute(int *b) { //取得a[2][2]的值 b[2*10+2]=1; } 預期的正確結果(Expected Output): 1 錯誤結果(Wrong Output): 每次執行都不一樣 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.235.209.60

06/06 02:32, , 1F
你明明是用vector,為什麼要用指標傳,不直接傳vecto
06/06 02:32, 1F

06/06 02:37, , 2F
因為function會寫在.cu裡面 cuda好像沒辦法用stl vector?
06/06 02:37, 2F

06/06 06:08, , 3F
雖然vector可當陣列來用但並"不表示"它內部結構等同於陣列
06/06 06:08, 3F

06/06 10:39, , 4F
vector還有很多額外的屬性和方法, 也會佔掉記憶體的
06/06 10:39, 4F

06/06 10:47, , 5F
一維的 &v[0] 在很多情況下不會有問題,但二維不一定連續
06/06 10:47, 5F

06/06 11:56, , 6F
不連續很合理吧, 它比較像 T** 而不是 T(*)[]
06/06 11:56, 6F

06/06 14:20, , 7F
那當沒辦法使用vector來接時 要怎麼傳遞多維vector?
06/06 14:20, 7F

06/06 16:15, , 8F
用用看iterator?
06/06 16:15, 8F

06/06 17:28, , 9F
沒辦法include<vector.h> 要怎麼使用vector<T>:: it... ?
06/06 17:28, 9F
※ 編輯: sd016808 來自: 220.134.147.231 (06/06 17:33)
文章代碼(AID): #1Hhu7iSb (C_and_CPP)
文章代碼(AID): #1Hhu7iSb (C_and_CPP)