0

現在、すべてのデータを変数としてベクターに保存しています。そのベクトルから選択したデータを取得しようとして、変数として保存して計算を行い、答えを変数として保存して元のベクトルに保存しますか?

データ ファイルの形式は次のとおりです。

    a     b       c        d      e
    1    7.3     0.8      14    74.6     
    2    6.5     0.1      13     3.3     
    3   10.8     1.4      12    75.8     
    4   13.2     3.5       6    32.4

私のコードはこれまでのところ以下のとおりです。

struct Weather
{
  int a_data;
  double b_data;
  double c_data;
  int d_data;
  double e_data;
  double ans_data;
};



int main () 
{
  using std::vector;
  using std::string;
  using std::getline;
  using std::cout;

  vector<Weather> data_weather;
  string line;
  ifstream myfile ("weatherdata.txt");

  if (myfile.is_open())
  {
    int count = 0;
    while (getline(myfile, line)) 
    {
      if (count > 6) 
      {
            int a, d; 
            double b, c, e;
            std::istringstream buffer(line); 
            std::string sun_as_string;
            if (buffer >> a >> b >> c >> d >>e_as_string) 
            {
                if (e_as_string == "---")
                {
                    e = 0.0;
                }
                else
                {
                    std::istringstream buffer2(e_as_string);
                    if (!(buffer2 >> e))
                    {
                        e = 0.0;
                    }
                }
                Weather objName = {a, b, c, d, e};
                data_weather.push_back(objName);  
            }
      }
      count++;
    }
    myfile.close();

    double temp_b, temp_c, temp_ans; //declaring my new variables
    for (auto it = data_weather.begin(); it != data_weather.end(); ++it)
    { 
        std::cout << it->b_data << " " << it->c_data << std::endl;

    }
 }

   }
   else 

   cout << "unable to open file";

   scat::pause("\nPress <ENTER> to end the program.");

   return 0;
}

任意の助けをいただければ幸いです

4

2 に答える 2

0

明らかな何かが欠けていますか、それとも単にこれを行う必要がありますか?

for (auto it = data_weather.begin(); it != data_weather.end(); ++it)
{ 
    it->ans_data = it->b_data * it->c_data;
}

イテレータを逆参照すると、ベクトル内の既存のオブジェクトへの参照が得られます。これには一時変数は必要ありません。

より優れた C++11 の代替手段は、範囲ベースの for ループです。

for (Weather& w : data_weather)
{
    w.ans_data = w.b_data * w.c_data;
}

操作したい行のインデックスのリストを指定すると、次のようなことができます。

Weather& w = data_weather[i]; // shortcut so you don't need to
                              // write data_waether[i] each time
w.ans_data = (w.b_data * w.c_data)/2;

ここで、i は関心のある行のインデックスです。これをある種のループにしたい場合があります。私はあなたのための練習としてそれを残します:)

于 2013-04-09T13:35:44.773 に答える