Как я могу наложить цикл на часть моего кода?
У меня есть такой вклад :
STEP 10 NUMBER line 2 cc aa ab ac ad 1 1 81 91 101 2 1 82 92 102 STEP 20 NUMBER line 2 cc aa ab ac ad 1 1 51 61 71 2 1 52 62 72 STEP 30 NUMBER line 2 cc aa ab ac ad 1 1 51 61 71 2 1 52 62 72
и у меня есть такой фрагмент кода :
#include <algorithm> #include <fstream> #include <iostream> #include <string> using namespace std; #include <vector> using Matrix = std::vector<std::vector<float>>; void addRow(Matrix& M, const int rowNum, const int id, const float type, const float x, const float y,const float z) { M[rowNum][0] = id; M[rowNum][1] = type; M[rowNum][2] = x; M[rowNum][3] = y; M[rowNum][4] = z; } int main() { string line; float x0, y0, z0, x1, y1, z1, type; int NUMBER_line=0, id=0,NUMBER_line1=0; ifstream myfile("1.txt"); string namefile; if (myfile.is_open()) { for (int lineno = 0; getline(myfile, line) && lineno < 7; lineno++) { if (lineno == 2) myfile >> NUMBER_line; } cout << " NUMBER_line: " << NUMBER_line << endl; Matrix Input0(NUMBER_line, std::vector<float>(5)); for (float linenoq = 0; getline(myfile, line) && linenoq < NUMBER_line; linenoq++) { myfile >> id >> type >> x0 >> y0 >> z0; addRow(Input0, linenoq, id, type, x0, y0, z0); } for (int lineno = 0; getline(myfile, line) && lineno < 7; lineno++) { if (lineno == 2) myfile >> NUMBER_line1; } Matrix Input1(NUMBER_line1, std::vector<float>(5)); for (int linenoq = 0; getline(myfile, line) && linenoq < NUMBER_line1; linenoq++) { myfile >> id >> type >> x1 >> y1 >> z1; addRow(Input1, linenoq, id, type, x1, y1, z1); } Matrix Output(NUMBER_line, std::vector<float>(5)); for (size_t row = 0; row < Output.size(); ++row) { for (size_t col = 0; col < Output[0].size(); ++col) { if (col < 2) { Output[row][col] = Input0[row][col]; } else { Output[row][col] = Input1[row][col] - Input0[row][col] ; } } } std::for_each(Output.cbegin(), Output.cend(), [](auto const& row) { std::for_each(row.cbegin(), row.cend(), [](const float value) { cout << value << " "; }); cout << endl; }); } else cout << "Unable to open file"; return 0; }
этот код вычитает три последних числа в строках 21 и 22 из 10 и 11 моего входного файла, то есть 51 и 81 или 72 и 102. этот код просто рассматривает два первых "шага"( например, первые звезды "шага" от строки 1 до конца строки 10). Теперь, как можно изменить код, чтобы код вычитал числа 2-го,3-го,... "шага" из первого "шага".(У меня есть более 1000 шагов)
Что я уже пробовал:
Если я хочу сделать это вычитание, я должен добавить этот кусок кода в конце кода и повторить его для другого "шага", но это очевидно, не будучи правдоподобным способом:
for (int lineno = 0; getline(myfile, line) && lineno < 7; lineno++) { if (lineno == 2) myfile >> NUMBER_line3; } Matrix Input2(NUMBER_line3, std::vector<float>(5)); for (int linenoq = 0; getline(myfile, line) && linenoq < NUMBER_line3; linenoq++) { myfile >> id >> type >> x1 >> y1 >> z1; addRow(Input2, linenoq, id, type, x1, y1, z1); } Matrix Output2(NUMBER_line, std::vector<float>(5)); for (size_t row = 0; row < Output2.size(); ++row) { for (size_t col = 0; col < Output2[0].size(); ++col) { if (col < 2) { Output2[row][col] = Input0[row][col]; } else { Output2[row][col] = Input2[row][col] - Input0[row][col] ; } } } std::for_each(Output2.cbegin(), Output2.cend(), [](auto const& row) { std::for_each(row.cbegin(), row.cend(), [](const float value) { cout << value << " "; }); cout << endl; });
Теперь, как я могу предотвратить это добавление, поставив петлю? заранее спасибо за любую подсказку или помощь