なまもの備忘録

気になったことをつらつらと書いていきます

(C++)大きさ不明の2次元配列データを2次元vectorに読み込む方法

3/22 17:10

大きさの分からない2次元配列データを2次元vectorに格納する方法がいくら調べても見つからなかったので、分からないなりに調べつつコードを作成してみた。
下記のコードであれば、データが数値のcsvファイルならなんでも読み込めるはず。

//大きさ不明の2次元配列データを2次元vectorに読み込むコード
//読み込み先の2次元vectorはあらかじめ用意しておく必要がある

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

bool Getdata(string filename,vector<vector<double> >& data){
  ifstream reading_file;
  reading_file.open(filename,ios::in);

  string reading_line_buffer;

  cout << "reading " << filename << "..." << endl;

  getline(reading_file,reading_line_buffer);//1行目を空読み(適用していたデータの都合上) 

  double num;
  char comma;

  while(!reading_file.eof()){
    vector<double> temp_data;
    getline(reading_file,reading_line_buffer);
    istringstream is(reading_line_buffer);
    while(!is.eof()){
      is >> num >> comma;
      temp_data.push_back(num);
    }
    data.push_back(temp_data);
  }

  return true;
}

//動作テスト                                                                      
int main(){
  vector<vector<double> > data;//読み込み先2次元vectorを用意する
  Getdata("post_bz100.tifresult.csv",data);

  for(int j=0 ;j < data.size() ;j++){
    for(int i=0 ;i < data[j].size() ;i++){
      cout << data[j][i] << " ";
    }
    cout << "\n";
  }
  cout << "\n";

  return 0;
}