
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;
}
}
No.1ベストアンサー
- 回答日時:
vector<int> { 0, 1, 2, 3, 4, ... } から偶数を削除するサンプル
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
int main() {
const int N = 100;
/* ダメな消し方 ---
vector<int> bad(N);
iota(begin(bad), end(bad), 0);
for ( vector<int>::iterator it = begin(bad); it != end(bad); ++it ) {
if ( *it % 2 == 0 ) {
it = bad.erase(it);
}
}
for ( int i = 0; i < bad.size(); ++i ) { cout << bad[i] << ' '; }
cout << endl;
*/
vector<int> good(N);
iota(begin(good), end(good), 0);
good.erase(remove_if(begin(good), end(good), [](int n) { return n % 2 == 0;}), end(good));
for ( int i = 0; i < good.size(); ++i ) { cout << good[i] << ' '; }
cout << endl;
}
No.2
- 回答日時:
erase() は削除した項目の次の項目を指すイテレータを返しますが、ループのインクリメント it++ によって、さらに次(削除された項目の次の次)のイテレータに移ることになります。
つまり、削除された項目の次の項目は飛ばされてしまう、ということで。ところで、erase() の後に書かれている
cout << (*it)[0] << endl;
は、削除された項目の次の項目(の先頭要素)を出力していますが、それは意図したものでしょうか?(ホントは削除されたものの値を知りたかったのでは?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
_tcscat がうまくいきません(V...
-
C言語 MACアドレス
-
【C++】ヘッダ内でstringを格納...
-
C++でUNDOを実装しようとしてい...
-
VC++で文字列から任意の文字を...
-
C++での <iostream.h>と<iostre...
-
switch文のエラーについて
-
C言語からgnuplot呼び出し
-
「Aに対するBの割合」と「Aに対...
-
ある商品のロス率を5%見込み、...
-
Aの値からBの値を除するとは??
-
2曲同時再生するにはどうした...
-
DWORDの実際の型は何でしょうか
-
有効数字について 以前質問をし...
-
複数桁10進数の*桁目だけを抽出...
-
エクセルの問題です。絶対値の...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VxWorks 6.4ソケット接続につい...
-
gccでコンパイル時のエラー
-
iostream インクルード時に発生...
-
#include "fstream.h"
-
【C++】ヘッダ内でstringを格納...
-
#defineの使い方について
-
構文エラーが出ているのですが...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
C++での <iostream.h>と<iostre...
-
enumの値から定義名を文字列化...
-
MingwでC++のソースがコンパイ...
-
違い
-
VC++で
-
C++で日本語の処理がしたいです
-
継承されたABのクラスのポイン...
-
C++でShowCursorを使いたい。
おすすめ情報