2次元vectorのerase?
1行に4つのdouble型の値が書かれているファイルを読み込み、
iを行数として1行ずつphoton[i][0]~photon[i][3]に入れる。
photon[i][0]がある条件を満たしたらphoton[i][1]~photon[i][3]の値を
photon[i-1][1]~photon[i-1][3]と
photon[i+1][1]~photon[i+1][3]に
分けて加算し、photon[i][0]~photon[i][3]は消す(加算後の[i+1]が[i]に来るようにしたい)という作業をしたいのですが、消し方が良く分かりません。
やり方をご存知の方、回答お願いします。
以下のやり方では消えませんでした。vector<double>(4)のほうをeraseしてないからでしょうか。
----------
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <vector>
using namespace std;
int main(){
string str;
ifstream ifs("h2o.csv");
ofstream ofs("h2o.txt");
int i = 0;
double sum[3] = {0};
vector< vector<double> > photon(147, vector<double>(4));
double value[4] = {0};
for(;getline(ifs,str); i++){
sscanf(str.c_str(),"%lf,%lf,%lf,%lf", &value[0], &value[1], &value[2], &value[3]);
photon[i][0] = value[0];
photon[i][1] = value[1];
photon[i][2] = value[2];
photon[i][3] = value[3];
sum[0] += value[1];
sum[1] += value[2];
sum[2] += value[3];
}
for(vector< vector<double> >::iterator it = photon.begin(); it != photon.end(); it++){
if( (*it)[0] > 0.1){
cout << "delete!";
it = photon.erase(it);
}
cout << (*it)[0] << endl;
}
}
お礼
英米人でも「ロジカルにおかしな言い方」をするのですねぇ。 私は、英語教員に、「英米人はロジカルに文章を構成する」と習い、常に他動詞の目的語は何か、に注意するよう教えれたので、英米人以上にロジカルな文章にこだわるようになってしまったということかもしれません。 どうもありがとうございます。