
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミングのC++とかPhotonとかJavaはどうすれば入手できますか? 2 2022/04/06 21:06
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iostream インクルード時に発生...
-
switch文のエラーについて
-
findnext();について
-
std::map の const 修飾について
-
Vectorのポインタが入ったvector
-
空白を含む名前のファイル等を
-
mainの外に変数 vs ポインタ渡し
-
MingwでC++のソースがコンパイ...
-
gccでコンパイル時のエラー
-
C++のifstreamの使い方
-
wstringの内容を表示させたい
-
空ENTERの判別
-
構造体に決められた文字列を入...
-
_tcscat がうまくいきません(V...
-
違い
-
VxWorks 6.4ソケット接続につい...
-
VC++で
-
OpenCVでRAW画像(カラー)を開...
-
C++で、テキストファイルを一行...
-
JPEGやPNGが読めるLoadImage関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
#define中の#のエスケープ
-
std::map の const 修飾について
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
-
ヘッダーファイルがインクルー...
おすすめ情報