Присоединение к файлу .csv рекурсивно - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть функция возврата, которая генерирует комбинацию с повторением, и дополнительное значение некоторой функции, которая принимает значения комбинации в качестве параметров.

Комбинации сохраняются в виде вектора, поэтому я хотел бы, чтобы мой CSV-файл вывод с двумя столбцами, подобный этому:

    vector | result
    1 1 1 1 , 0.25
    1 1 1 2 , 0.2
    …
    4 4 4 4 , 0.16

Тем не менее, мой вывод разбивается по отдельности, и я получаю только последнее значение в рекурсии и выглядит так

A | B | C | D | E
4   4   4   4 , 0.16

Вот функция, с которой я работаю:

void backtrack(int a[], std::vector<int> &rez, int i, int n) {

    std::ofstream f;
    f.open ("comb_unsorted.csv");

    if (rez.size() == n) {
        for (auto it = rez.begin(); it != rez.end(); it++)
            f << *it << " ";

        f << ",";
        f << function(rez);
        f << '\n';

        return;
    }

    for (int j = i; j < n; j++) {

        rez.push_back(a[j]);
        backtrack(a, rez, j, n);
        rez.pop_back();

        while (j <= n && a[j] == a[j + 1])
            j++;
    }
    f.close();
}

1 Ответ

1 голос
/ 12 апреля 2020
#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;

int function(vector<int>& rez) {
   return 1;
}

void backtrack(const int arr[], vector<int>& out, const int arrSize, const size_t maxLength) {
   // You should not do this! This is just an example!
   // In order to open/close file properly - do it outside this function and then pass std::ofstream as 5th argument
   static ofstream file("output.csv");

   if (maxLength == 1) {
      stringstream dataFromOut;
      copy(out.begin(), out.end(), ostream_iterator<int>(dataFromOut, " "));
      for (int j = 0; j < arrSize; j++)
         file << dataFromOut.str() << arr[j] << " , " << function(out) << endl;
      return;
   }
   for (int i = 0; i < arrSize; i++) {
      out.push_back(arr[i]);
      backtrack(arr, out, arrSize, maxLength - 1);
      out.pop_back();
   }
}

int main() {
   int str[] = { 1, 2, 3, 4 };
   int arrSize = 4;
   vector<int> test;
   backtrack(str, test, arrSize, arrSize);
   return 0;
}

И это вывод:

1 1 1 1 , 1
1 1 1 2 , 1
1 1 1 3 , 1
1 1 1 4 , 1
1 1 2 1 , 1
1 1 2 2 , 1
1 1 2 3 , 1
1 1 2 4 , 1
1 1 3 1 , 1
1 1 3 2 , 1
1 1 3 3 , 1
1 1 3 4 , 1
1 1 4 1 , 1
1 1 4 2 , 1
1 1 4 3 , 1
1 1 4 4 , 1
1 2 1 1 , 1
1 2 1 2 , 1
1 2 1 3 , 1
1 2 1 4 , 1
1 2 2 1 , 1
1 2 2 2 , 1
1 2 2 3 , 1
1 2 2 4 , 1
1 2 3 1 , 1
1 2 3 2 , 1
1 2 3 3 , 1
1 2 3 4 , 1
1 2 4 1 , 1
1 2 4 2 , 1
1 2 4 3 , 1
1 2 4 4 , 1
1 3 1 1 , 1
1 3 1 2 , 1
1 3 1 3 , 1
1 3 1 4 , 1
1 3 2 1 , 1
1 3 2 2 , 1
1 3 2 3 , 1
1 3 2 4 , 1
1 3 3 1 , 1
1 3 3 2 , 1
1 3 3 3 , 1
1 3 3 4 , 1
1 3 4 1 , 1
1 3 4 2 , 1
1 3 4 3 , 1
1 3 4 4 , 1
1 4 1 1 , 1
1 4 1 2 , 1
1 4 1 3 , 1
1 4 1 4 , 1
1 4 2 1 , 1
1 4 2 2 , 1
1 4 2 3 , 1
1 4 2 4 , 1
1 4 3 1 , 1
1 4 3 2 , 1
1 4 3 3 , 1
1 4 3 4 , 1
1 4 4 1 , 1
1 4 4 2 , 1
1 4 4 3 , 1
1 4 4 4 , 1
2 1 1 1 , 1
2 1 1 2 , 1
2 1 1 3 , 1
2 1 1 4 , 1
2 1 2 1 , 1
2 1 2 2 , 1
2 1 2 3 , 1
2 1 2 4 , 1
2 1 3 1 , 1
2 1 3 2 , 1
2 1 3 3 , 1
2 1 3 4 , 1
2 1 4 1 , 1
2 1 4 2 , 1
2 1 4 3 , 1
2 1 4 4 , 1
2 2 1 1 , 1
2 2 1 2 , 1
2 2 1 3 , 1
2 2 1 4 , 1
2 2 2 1 , 1
2 2 2 2 , 1
2 2 2 3 , 1
2 2 2 4 , 1
2 2 3 1 , 1
2 2 3 2 , 1
2 2 3 3 , 1
2 2 3 4 , 1
2 2 4 1 , 1
2 2 4 2 , 1
2 2 4 3 , 1
2 2 4 4 , 1
2 3 1 1 , 1
2 3 1 2 , 1
2 3 1 3 , 1
2 3 1 4 , 1
2 3 2 1 , 1
2 3 2 2 , 1
2 3 2 3 , 1
2 3 2 4 , 1
2 3 3 1 , 1
2 3 3 2 , 1
2 3 3 3 , 1
2 3 3 4 , 1
2 3 4 1 , 1
2 3 4 2 , 1
2 3 4 3 , 1
2 3 4 4 , 1
2 4 1 1 , 1
2 4 1 2 , 1
2 4 1 3 , 1
2 4 1 4 , 1
2 4 2 1 , 1
2 4 2 2 , 1
2 4 2 3 , 1
2 4 2 4 , 1
2 4 3 1 , 1
2 4 3 2 , 1
2 4 3 3 , 1
2 4 3 4 , 1
2 4 4 1 , 1
2 4 4 2 , 1
2 4 4 3 , 1
2 4 4 4 , 1
3 1 1 1 , 1
3 1 1 2 , 1
3 1 1 3 , 1
3 1 1 4 , 1
3 1 2 1 , 1
3 1 2 2 , 1
3 1 2 3 , 1
3 1 2 4 , 1
3 1 3 1 , 1
3 1 3 2 , 1
3 1 3 3 , 1
3 1 3 4 , 1
3 1 4 1 , 1
3 1 4 2 , 1
3 1 4 3 , 1
3 1 4 4 , 1
3 2 1 1 , 1
3 2 1 2 , 1
3 2 1 3 , 1
3 2 1 4 , 1
3 2 2 1 , 1
3 2 2 2 , 1
3 2 2 3 , 1
3 2 2 4 , 1
3 2 3 1 , 1
3 2 3 2 , 1
3 2 3 3 , 1
3 2 3 4 , 1
3 2 4 1 , 1
3 2 4 2 , 1
3 2 4 3 , 1
3 2 4 4 , 1
3 3 1 1 , 1
3 3 1 2 , 1
3 3 1 3 , 1
3 3 1 4 , 1
3 3 2 1 , 1
3 3 2 2 , 1
3 3 2 3 , 1
3 3 2 4 , 1
3 3 3 1 , 1
3 3 3 2 , 1
3 3 3 3 , 1
3 3 3 4 , 1
3 3 4 1 , 1
3 3 4 2 , 1
3 3 4 3 , 1
3 3 4 4 , 1
3 4 1 1 , 1
3 4 1 2 , 1
3 4 1 3 , 1
3 4 1 4 , 1
3 4 2 1 , 1
3 4 2 2 , 1
3 4 2 3 , 1
3 4 2 4 , 1
3 4 3 1 , 1
3 4 3 2 , 1
3 4 3 3 , 1
3 4 3 4 , 1
3 4 4 1 , 1
3 4 4 2 , 1
3 4 4 3 , 1
3 4 4 4 , 1
4 1 1 1 , 1
4 1 1 2 , 1
4 1 1 3 , 1
4 1 1 4 , 1
4 1 2 1 , 1
4 1 2 2 , 1
4 1 2 3 , 1
4 1 2 4 , 1
4 1 3 1 , 1
4 1 3 2 , 1
4 1 3 3 , 1
4 1 3 4 , 1
4 1 4 1 , 1
4 1 4 2 , 1
4 1 4 3 , 1
4 1 4 4 , 1
4 2 1 1 , 1
4 2 1 2 , 1
4 2 1 3 , 1
4 2 1 4 , 1
4 2 2 1 , 1
4 2 2 2 , 1
4 2 2 3 , 1
4 2 2 4 , 1
4 2 3 1 , 1
4 2 3 2 , 1
4 2 3 3 , 1
4 2 3 4 , 1
4 2 4 1 , 1
4 2 4 2 , 1
4 2 4 3 , 1
4 2 4 4 , 1
4 3 1 1 , 1
4 3 1 2 , 1
4 3 1 3 , 1
4 3 1 4 , 1
4 3 2 1 , 1
4 3 2 2 , 1
4 3 2 3 , 1
4 3 2 4 , 1
4 3 3 1 , 1
4 3 3 2 , 1
4 3 3 3 , 1
4 3 3 4 , 1
4 3 4 1 , 1
4 3 4 2 , 1
4 3 4 3 , 1
4 3 4 4 , 1
4 4 1 1 , 1
4 4 1 2 , 1
4 4 1 3 , 1
4 4 1 4 , 1
4 4 2 1 , 1
4 4 2 2 , 1
4 4 2 3 , 1
4 4 2 4 , 1
4 4 3 1 , 1
4 4 3 2 , 1
4 4 3 3 , 1
4 4 3 4 , 1
4 4 4 1 , 1
4 4 4 2 , 1
4 4 4 3 , 1
4 4 4 4 , 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...