作者jackwei (吐司)
看板C_and_CPP
標題[問題] vector中含自創class的point
時間Tue Mar 15 21:21:51 2011
開發平台(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
→ akasan:vector 當容量不夠時會長大, 然後去要一塊新的記憶體 03/15 21:23
→ akasan:接著把舊的東西搬過去, 原本的記憶體就丟了 03/15 21:24
→ akasan:最簡單的解法是 structure 裡面就存 index 吧 03/15 21:25
→ jackwei:structure裡面直接存index的話 03/15 21:30
→ jackwei:那我修改member後 structure裡面的東西怎麼跟著改呢? 03/15 21:31
→ jackwei:不過如果是 structure改成 vector<vector<int>>好像也可 03/15 21:32
→ jackwei:但還是好奇有沒有pointer的做法 感謝樓上 03/15 21:32
→ akasan:把 member 換成 list 或著是 member 裡面也存 pointer 03/15 21:34
→ loveme00835:可以說說你這樣做的動機嗎? 03/15 23:44
→ johnhmj:容器像vector這個,不適合放指標。 03/16 00:00
→ softwind:instance or pointer/reference放一個就好 你這樣重複指 03/16 00:41
→ softwind:有甚麼特別用意嗎??? 03/16 00:41
推 avhacker:都存 shared_ptr 就好啦 03/16 01:56
推 Ebergies:全部都像樓上那樣或者直接用 pointer 就好啦... 03/16 10:22
→ jackwei:感謝回應! shared_ptr 我第一次聽到 會再去查查怎麼用 03/16 13:01