0
私の仕事は、ログとテキストファイルを読み込んでパラメータを値で区切るC++で小さなprogrammを作成することです。整数のベクトルを持つ構造体のベクトル
#CURRENT_OPTIMIZED_BVH_NODES
210023
#CURRENT_OPTIMIZED_BVH_COST
118.856
#CURRENT_OPTIMIZED_BVH_COST_RATIO
1
#ANIMATION_TIME
0.91
#REFIT_TIME
0.0411972
#UPDATE_TIME
0.000135373
#UPDATE_TIME_SUM
0.000135373
#BUILD_TIME_SUM
0.000135373
#UPDATE_REFIT_RATIO
0.00328597
...
そして、私の仕事は、いくつかのパラメータのユーザーの書き込み名CMDに表示される出力を、作ることです:
入力ファイルの構造は次のようです。 このように:
#CURRENT_OPTIMIZED_BVH_NODES
210023
210024
210065
210047
265400
....
私のプログラムは今のようになります。私は2つの問題があります - どのようにベクトルで作業するのか分かりませんが、私は動的配列のために必要です(ファイル内にいくつの異なるパラメータがあるか、また単一パラメータがいくつあるか知っている人はいません)私の出力のためのargv。 私がアドバイス多くのを発見したが、どこにも実際には私は私のコードに使用することができること、なかった:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdio.h>
#include <vector>
using namespace std;
struct ParStruct
{
string name;
vector<double> value;
double average;
double min;
double max;
double median;
};
void WriteParameter(ParStruct Parameter, int SizeOfValueArr)
{
cout << Parameter.name << endl;
for (int i = 0; i < SizeOfValueArr; i++){
cout << Parameter.value[i] << endl;;
}
}
int main(int argc, char *argv[])
{
vector <ParStruct> Parameter;
Parameter.push_back(ParStruct());
Parameter[0].value.push_back(double());
string s = argv[0];
argv[1];
int LogNumber, LineNumber = 1, optionnumber;
ifstream LogFile;
double ParValue;
string MemoryLog, options, fileline;
string LogFilePath;
cout << "Path: ";
getline(cin, LogFilePath);
LogFile.open(LogFilePath);
while (LogFile.good()){
while ((getline(LogFile, fileline)) && !(LogFile.eof())) {
if (fileline[0] == '#'){ //Parameter
MemoryLog = fileline;
for (int i = 0; i < Parameter.size(); i++) {
if ((fileline != Parameter[i].name) && Parameter[i].name.size() < 2) {
Parameter[i].name = fileline;
}
else
{
Parameter.push_back(ParStruct());
Parameter[i].name = fileline;
}
}
}
else {
istringstream Number(fileline);
Number >> ParValue;
for (int i = 0; i < Parameter.size(); i++) {
if (Parameter[i].name == MemoryLog) {
for (int m = 0; m < Parameter[i].value.size(); m++) {
if (Parameter[i].value[m] <= 0) {
Parameter[i].value[m] = ParValue;
}
}
}
}
}
}
}
for (int i = 0; i < Parameter.size(); i++){
WriteParameter(Parameter[i], Parameter[i].value.size());
}
LogFile.close();
return 0;
}
私は一般的な構造が間違っていると思います。あなたはパラメータ名としてキーを持つ 'map'(C++ libドキュメントをチェックする)を作成し、値は読み込み値のベクトルとして作成する必要があります。あなたはアイテムを反復しながら何かをpush_backします( 'Parameter.push_back(ParStruct())')。間違っている –
あなたは何を求めていますか?なぜこの[tag:c]にタグを付けましたか? –
@ Jean-FrançoisFabreはい、間違っているようですが、完全に機能します。私はちょうど常にNULL値と正確にこれ(Parameter.push_back(ParStruct()))でそれを行う新しい配列を作成する必要があります。なぜ私に聞かないでください、私は初心者です:D – M4rty32