GetLoad_CSV();関数で.csvファイルを読み込みその戻り値がvectorの二次元int型配列なのですがそのvectorの二次元int型配列を格納するstd::vector<>型配列をどう記述すればいいのかわかりません。どうすればいいのでしょうか?
提示コードのidx変数は値型で実装することができましたが自分は参照型で行いたいためstd::vector<std::vector<int>> *;の戻り値を使いたいのですがどうすればいいのでしょうか?
#include "stdio.h" #include <vector> std::vector<std::vector<int>> *GetLoad_CSV(const char *filename, std::vector<std::vector<int>> **result); std::vector<std::vector<int>> *GetLoad_CSV(const char *filename, std::vector<std::vector<int>> **result) { FILE *fp; char tm[5000]; //読み込んだ.csvファイルの文字列 //const char *filename = "MapLayer1.csv"; //.csvファイルを読み込む //std::vector<std::vector<int>> idx; //マップチップ番号格納 std::vector<std::vector<int>> *idx = new (std::vector<std::vector<int>>); //マップチップ番号格納 int vi = 0; char str[10]; fp = fopen(filename, "r"); if (fp == NULL) { printf("読み込み失敗\n"); exit(1); } // printf("読み込み成功\n"); while (fgets(tm, 5000, fp) != NULL) //一行づつ読み取り { idx->emplace_back(); int i = 0; int c = 0; while (true) { if ((tm[i] >= '0' && tm[i] <= '9') || (tm[i] == '-' || tm[i] == '+')) //文字だった場合 { str[c] = tm[i]; i++; c++; } else { int t = atoi(str); //数字をint型に変換 idx->back().push_back(t); //最後の配列に追加 memset(str, '\0', sizeof(str)); //数字保存char型配列を空にする //文字以外の数字でそれが'\n','\0'だった最後なのでループを抜ける if (tm[i] == '\n' || tm[i] == '\0') { break; } c = 0; i++; } } } //print_vector(idx); if (result != NULL) { *result = idx; } return idx; } std::vector<std::vector<std::vector<int>>> idx; std::vector<std::vector<int>> *idx2; int main(int argc,char** argv) { idx2 = GetLoad_CSV("MapLayer1.csv", nullptr); idx.emplace_back(); idx.push_back(*GetLoad_CSV("MapLayer1.csv", nullptr)); idx.push_back(*GetLoad_CSV("MapLayer2.csv", nullptr)); idx.push_back(*GetLoad_CSV("MapLayer3.csv", nullptr)); printf("aaaa\n"); return 0; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。