• 締切済み

STLを使ったデータ定義を添削ください

C++の設計は初めてです。以下のデータをC++のSTLを使って表そうしているのですが、添削をお願いします。 STLを使えるだけ使った方が開発効率が上がるかと思い、使っています。このデータにSTLなんぞ使う必要もなければ、ご指摘いただきたく、よろしくお願いします。 (1)2次元のテーブルデータを含む構造体  この構造体を使用する時は、等間隔のテーブルデータを線形補間します。与えられたxの前後のx座標を計算し、計算したx座標からy座標を取得します。 struct measurement{  char* dat_name; // データ名称  int detect_id; // 測定器ID  double start_x; // x座標開始点  double bin_width; // x座標ステップ幅  std::map<double, double> measurement; // map<x座標,y座標> }; (2)可変の大きさの構造体(表現方法にあまり自信ありません) vector <measurement> measurement_list;

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

こんな感じでどうでしょう。 template <typename T> class measurement {  std::string dat_name_;  int detect_id_;  T start_x_;  T bin_width_;  std::vector<T> data_; public:  measurement()   : detect_id_(-1), start_x_(0), bin_width_(0) {}  template<class InputIterator>  measurement(int detect_id, T start_x, T bin_width, InputIterator first, InputIterator last)   : detect_id_(detect_id), start_x_(start_x), bin_width_(bin_width)    data_(first, last) {}  measurement& operator=(const measurement& src)  {   measurement temp(src);   swap(temp);   return *this;  }  void swap(measurement& other)  {   dat_name_.swap(other.dat_name_);   std::swap(start_x_, other.start_x_);   std::swap(bin_width, other.bin_width_);   data_.swap(other.data_);  }  T f(T x)  {   // 線形補完後のyを返す  } }; 必要に応じて、dat_name_等を参照するメンバ関数を追加してください。 用途を見る限り、おそらく std::map は不要で、std::vector で十分かと思います。場合によっては、std::valarray もよいかもしれません。

aneja
質問者

お礼

お礼が遅くなり、すみませんでした。早速のご回答どうもありがとうございました。テンプレートクラスにすると良いのですね。恥ずかしながら、std::valarrayというのは、初めて見ました。経験豊富な方の例は、とても参考になります。今、ここまでのものをちゃっちゃと作れる自信はありませんが、参考にさせていただきます。ありがとうございました。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

そうですね。 measurementを単なる構造体にするのではなくて、 > テーブルデータを線形補間します。与えられたxの前後のx座標を計算し ここらへんの機能も含めたクラスにするのがいいのでは。 あと、 char* dat_name; は、おそらく std::string dat_name にしたほうがいいのでは。 どっかに「データ名称」を保存しておく場所が他にあるのならこのままでいいですが。

aneja
質問者

お礼

お礼が遅くなって、すみません。早速のご回答どうもありがとうございました。アドバイスの通り、構造体ではなくクラスにしてみます。std::stringにも納得です。ありがとうございました。

関連するQ&A