Есть ли способ создать несколько вложенных циклов на основе макроса и аргумента? - PullRequest
0 голосов
/ 31 марта 2019

Я бы хотел, чтобы переменные числа вложенных циклов повторялись во всех комбинациях. Я пробовал смотреть на другие примеры кода, но вложенные циклы запускают FAR быстрее, чем все остальное, что я видел, что делает nCr. Ранее я видел решения, которые делают нечто подобное для вложенных циклов и массива индекса, но я не думаю, что это решение будет работать, потому что я делаю комбинации, а начало и конец каждого цикла основаны на номере цикла ( первое, второе и т. д.). Что я хотел бы сделать, это изменить

#define G(i) for(vars[i-1] = (i == 1 ? 0 : vars[i-2]+1); vars[i-1] < size - (choices - i); vars[i-1]++)

    int size, choices = 5;
    cin >> size;
    int cmb = 0;
    vector<int> vars(choices);
    G(1) {
    G(2) {
    G(3) {
    G(4) {
    G(5) {
        combos2.insert(combos2.begin(), choices.begin(), choices.end());
        cmb++;
    }}}}}

что-то вроде:

for(int i = 1; i < choices; i++) {
    G(i) {
        combos2.insert(combos2.begin(), choices.begin(), choices.end());
            cmb++;

}
// Some other macro to print correct number of braces
...