vectorコンテナについて
Posted: 2010年5月01日(土) 21:41
こんばんは、yskeyと申します。
現在DxLibで戦略ゲームを製作中で、ベクターコンテナによるグラフ構造を作ろうとしています。
グラフ構造をプログラム内で宣言するのに少し工夫をしようと思いこんな方法を思いつきました。
たとえば画像のようなマップを作るときは、
,2,4\n
,1,4,5,3\n
,2,5\n
,1,2,5\n
,2,3,4\n
のようにします。(\nは明示するために書いています)
これをこのようなプログラムで読み込みます。
コンマのときブランチを増やして次にある番号の配列のポインタをRegion_Node.Branchにしまいます。
現在DxLibで戦略ゲームを製作中で、ベクターコンテナによるグラフ構造を作ろうとしています。
グラフ構造をプログラム内で宣言するのに少し工夫をしようと思いこんな方法を思いつきました。
たとえば画像のようなマップを作るときは、
,2,4\n
,1,4,5,3\n
,2,5\n
,1,2,5\n
,2,3,4\n
のようにします。(\nは明示するために書いています)
これをこのようなプログラムで読み込みます。
コンマのときブランチを増やして次にある番号の配列のポインタをRegion_Node.Branchにしまいます。
-----------------------------------------------構造体宣言部
struct Region_Node_t{
vector<Region_Node_t*> Branch;
};
vector<Region_Node_t> Region_Node;
-----------------------------------------------読み込みプログラム
int Region_Ini(){
int fp,buf,bur_count=0,com_count=0;
if((fp=FileRead_open("dat/ini/region.dat"))==NULL){
return -1;
}
while((buf=FileRead_getc(fp))!=EOF){
if(buf=='\n')Region_Node.push_back();
}
if(FileRead_seek(fp,0,SEEK_SET)!=0)return -1;
while((buf=FileRead_getc(fp))!=EOF){
if(buf==','){
Region_Node[bur_count].Node.push_back();
buf=FileRead_getc(fp);
Region_Node[bur_count].Branch[com_count] = &Region_Node[buf];
com_count++;
}
if(buf=='\n'){
bur_count++;
com_count=0;
}
}
return 0;
}
要するにpush_back()を使って配列を増やすときに引数がいるのですが、push_backで配列を増やした後に構造体のメンバにポインタを格納したいときはどうすればよいのでしょうか?