STLのvectorコンテナを使ったプログラムで質問があります
Posted: 2012年6月30日(土) 17:41
エクセルのような5行×5列のデータを処理したくて
構造体の内部にstring型のポインタを宣言し、vectorコンテナに順次構造体を放り込んで
後から登録したデータをvectorコンテナ経由で呼び出すプログラムを書いています。
本来ならば、太郎~、次郎~と順にデータが出てくるのを狙っているのですが
vectorコンテナ内がすべて花子で埋め尽くされてしまいました。
構造体の領域は一つしか用意していないのですが、vectorコンテナに構造体を登録する場合は
元の構造体の領域を保存しておかねばならないのでしょうか・・・・?
プログラムのミスも含めてご指導いただけると助かります。
また、このようなデータを処理する場合こうしたほうが良いというアドバイスもいただけると助かります。
構造体の内部にstring型のポインタを宣言し、vectorコンテナに順次構造体を放り込んで
後から登録したデータをvectorコンテナ経由で呼び出すプログラムを書いています。
本来ならば、太郎~、次郎~と順にデータが出てくるのを狙っているのですが
vectorコンテナ内がすべて花子で埋め尽くされてしまいました。
構造体の領域は一つしか用意していないのですが、vectorコンテナに構造体を登録する場合は
元の構造体の領域を保存しておかねばならないのでしょうか・・・・?
プログラムのミスも含めてご指導いただけると助かります。
また、このようなデータを処理する場合こうしたほうが良いというアドバイスもいただけると助かります。
#include "stdafx.h"
#include<vector>
#include<string>
#include<iostream>
using namespace std;
//エクセルのように分割して文字列を保持したいので
//string型へのポインタを構造体内に宣言しておく
//保持するデータの列数の分だけ後でnewする
typedef struct{
string *str;
}DATA;
////////////////////////////////////////
//例:格納するデータ項目
//名前-年齢-出身地-性別-趣味
//
//今回はこれを5名分格納する領域を動的に確保する
//string型、構造体、vectorコンテナを使って実装する
////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
//カウンタ変数
int i,nCount;
//テスト用データ
char *lpHoge[] = {"太郎","32","日本","男","釣り",
"次郎","29","アメリカ","男","読書",
"三郎","25","オランダ","男","エリートヤンキー",
"五郎","22","イスラエル","男","三歩",
"花子","26","japan","女","料理"};
//コンテナの宣言
vector<DATA> vData;
//構造体の宣言
DATA memData;
//今回は5項目のデータを保持するとする
int nCol = 5;
//5名分の行数を確保
int nRow = 5;
//項目の列数を確保
memData.str = new string[nCol];
//構造体にデータを書いてvectorコンテナに代入していく
for(i = 0,nCount = 0;i < sizeof(lpHoge) / sizeof(lpHoge[0]) ;++i){
memData.str[nCount] = lpHoge[i];
//趣味まで格納したらカウンタをリセットしてコンテナに登録する
//nCow - 1で要素数以上にアクセスさせない
if(nCount == nCol -1){
nCount = 0;
vData.push_back(memData);
}else{
++nCount;
}
}
//格納データの確認
//イテレータの宣言
vector<DATA>::iterator pv;
//要素の先頭を代入
pv = vData.begin();
for(pv,nCount = 0;pv != vData.end();){
printf("%s , ",(*pv).str[nCount].c_str());
if(nCount == nCol -1){
cout <<endl;
nCount = 0;
pv++;
}else{
nCount++;
}
}
//要素の削除
delete[] memData.str;
return 0;
}
出力結果
花子 , 26 , japan , 女 , 料理 ,
花子 , 26 , japan , 女 , 料理 ,
花子 , 26 , japan , 女 , 料理 ,
花子 , 26 , japan , 女 , 料理 ,
花子 , 26 , japan , 女 , 料理 ,
続行するには何かキーを押してください . . .