[問題] vector中含自創class的pointer

看板C_and_CPP作者 (吐司)時間14年前 (2011/03/15 13:21), 編輯推噓2(2013)
留言15則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++ 問題(Question): 自己創了一個 class Agent 其中的 data member 沒有 pointer 另創了一個 class CS 其中的 data member 想要含有: 1. vector<Agent> member 2. vector< vector<Agent*> > structure 而 structure 當中的 vector<Agent*> 中的 Agent* 含的位置 就是 member 裡的 Agent 地址 請問要怎麼達成呢?? 程式碼(Code): class CS //brief for coalition structure { public: CS(int); ~CS(); .... private: int size; vector< Agent > member; vector< vector<Agent*> > structure; // { {2,3},{1},{4,5} } }; CS::CS(int n) { vector<Agent*> onlyone; //初始狀態 structure 只含一個 vector for(int i=1;i<=n;i++){ Agent agent(i); //初始化 agent 的 id member.push_back(agent); onlyone.push_back( &(member.at(i-1)) ); //應該是這行有問題 } structure.push_back(onlyone); size = n; cout<<member[0].id()<<endl; //印出 1 cout<<onlyone[0]->id()<<endl; //印出亂數 cout<<structure[0].at(0)->id()<<endl; //印出亂數 } 而且還得確保 constructor 結束之後 member 和 structure 的內容有正確對應到才行 應該怎麼修正呢 先謝謝大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.229.36

03/15 21:23, , 1F
vector 當容量不夠時會長大, 然後去要一塊新的記憶體
03/15 21:23, 1F

03/15 21:24, , 2F
接著把舊的東西搬過去, 原本的記憶體就丟了
03/15 21:24, 2F

03/15 21:25, , 3F
最簡單的解法是 structure 裡面就存 index 吧
03/15 21:25, 3F

03/15 21:30, , 4F
structure裡面直接存index的話
03/15 21:30, 4F

03/15 21:31, , 5F
那我修改member後 structure裡面的東西怎麼跟著改呢?
03/15 21:31, 5F

03/15 21:32, , 6F
不過如果是 structure改成 vector<vector<int>>好像也可
03/15 21:32, 6F

03/15 21:32, , 7F
但還是好奇有沒有pointer的做法 感謝樓上
03/15 21:32, 7F

03/15 21:34, , 8F
把 member 換成 list 或著是 member 裡面也存 pointer
03/15 21:34, 8F

03/15 23:44, , 9F
可以說說你這樣做的動機嗎?
03/15 23:44, 9F

03/16 00:00, , 10F
容器像vector這個,不適合放指標。
03/16 00:00, 10F

03/16 00:41, , 11F
instance or pointer/reference放一個就好 你這樣重複指
03/16 00:41, 11F

03/16 00:41, , 12F
有甚麼特別用意嗎???
03/16 00:41, 12F

03/16 01:56, , 13F
都存 shared_ptr 就好啦
03/16 01:56, 13F

03/16 10:22, , 14F
全部都像樓上那樣或者直接用 pointer 就好啦...
03/16 10:22, 14F

03/16 13:01, , 15F
感謝回應! shared_ptr 我第一次聽到 會再去查查怎麼用
03/16 13:01, 15F
文章代碼(AID): #1DVsVnAg (C_and_CPP)
文章代碼(AID): #1DVsVnAg (C_and_CPP)