[問題] 用vector存指標,如果超過容量存位置會 …

看板C_and_CPP作者 (☆㊣↖煞氣ㄟ阿喂↘ξ★)時間15年前 (2010/03/06 13:15), 編輯推噓6(6012)
留言18則, 4人參與, 最新討論串1/1
我用VS 2008編譯。 我知道用vector當空間不夠會再自動獲得更多空間。 因此,如果我的vector存的是指標,且指標指向之前vector給我的空間, 當空間不夠時重新分配空間,我存的指標有可能會跑掉。 但我的情況是這樣: class Node{ public: int ID; int x; int y; Node(){ x = Uniform(Limit); /// x座標隨機給值:0~Limit之整數 y = Uniform(Limit); }; vector<Node*> neighbor; /// 一個陣列記錄Node的neighbor void get_Inf(); }; void getNeighbor( Node* ptr ){ //// .....計算 Node間相對距離,如果滿足某條件則互為鄰居.... /// (ptr+i)->neighbor.push_back(ptr+j); (ptr+j)->neighbor.push_back(ptr+i); } void Node::getInf(){ for(unsigned i=0; i<neighbor.size(); i++) cout<<"neighbor"<<i<<" = "<<neighbor[i]->ID<<endl; } int mian(){ Node* ptr = new Node[N]; getNeighbor( ptr ); //// Get each node info. //// for(int j = 0; j<N; j++){ cout<<"========Node:"<<j<<"============="<<'\n'; (ptr+j)->getInf(); } cout<<"=========================================="<<endl; delete ptr []; system("pause"); } 我的問題是如果我在Node class 只宣告vector空殼 最後再用function一個一個push_back,這樣子如果neighbor的空間滿了重新分配空間, 原來存的指標指向的位置還會指錯嗎? 如果還是會指錯,那該怎麼解決呢? 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.132.128.158 ※ 編輯: kkroy 來自: 202.132.128.158 (03/06 14:27)

03/06 14:41, , 1F
重新分配的不是應該是vector本身 跟他紀錄的值有關係嗎?
03/06 14:41, 1F

03/06 14:43, , 2F
他的指標址到的空間也是vector配給的, 所以被指到的空間
03/06 14:43, 2F

03/06 14:43, , 3F
發生relocate的時候就死掉了....@_@"
03/06 14:43, 3F

03/06 14:51, , 4F
喔那不就架構上的問題 那不就不能用vector了?
03/06 14:51, 4F
※ 編輯: kkroy 來自: 202.132.128.158 (03/06 15:36)

03/06 15:37, , 5F
To:VictorTom 那我vector裡面的指標是在mian裡就固定好N個
03/06 15:37, 5F

03/06 15:39, , 6F
即使發生reallocate也不會有問題對吧?!!
03/06 15:39, 6F

03/06 15:40, , 7F
ㄟ~~理論上, 只是, 如果固定好N個, 開靜態或自己動態
03/06 15:40, 7F

03/06 15:40, , 8F
new / malloc不是更乾脆嗎@_@"
03/06 15:40, 8F

03/06 15:42, , 9F
我在main裡面是new一個固定N大小的class array
03/06 15:42, 9F

03/06 15:43, , 10F
然後經過某些運算,算出object間的距離,並由neighbor紀錄
03/06 15:43, 10F

03/06 15:44, , 11F
該object的記憶體位置,所以理當neighbor這個vector
03/06 15:44, 11F

03/06 15:44, , 12F
reallocate並不會改到存的指標指的位置,我說的對吧?!
03/06 15:44, 12F

03/06 15:58, , 13F
看起來是這樣沒錯@_@"
03/06 15:58, 13F

03/06 21:50, , 14F
其實就是一樓說的 重新分配的只有vector本身
03/06 21:50, 14F

03/06 21:50, , 15F
他紀錄的值不管是 int 是指標都沒有關係
03/06 21:50, 15F

03/06 21:50, , 16F
你要擔心的應該是指向 vector 裡面某處的指標
03/06 21:50, 16F

03/06 21:50, , 17F
(也就是 vector::iterator) 合不合法
03/06 21:50, 17F

03/07 18:32, , 18F
原來如此~謝謝你們! 我懂了!
03/07 18:32, 18F
文章代碼(AID): #1BaUJKpO (C_and_CPP)