Как вызвать функцию “arr.size() в степени n” раз

255
11 марта 2017, 04:00

Надо написать функцию следующего вида: на вход подаётся массив arr, число n и функция foo. Надо, чтобы над каждым из элементов массива arr функция выполнялась arr.size() ^ n раз, т.е. нужно n вложенных циклов. Можно сделать и один цикл от 1 arr.size() ^ n, но это число легко переполняется.

Например, при n = 3 функция должна вырождаться в следующее:

for (int i1 = 0; i1 < arr.size(); ++i1)
 for (int i2 = 0; i2 < arr.size(); ++i2)
  for (int i3 = 0; i3 < arr.size(); ++i3)
   foo(arr[i3]); 
Answer 1

Рекурсия, она спасает и не в таких ситуациях :)

int total = 0;
void foo(int&)
{
    ++total;
    // do stuff
}
void cycle(int&a, void (*foo)(int&), int n, int level = 0)
{
    if (level == n)
        foo(a);
    else
        for(int i = 0; i < n; ++i) cycle(a,foo,n,level+1);
}
int main(int argc, const char * argv[])
{
    int i = 0;
    cycle(i,foo,4);
    cout << total << endl;
}

Идея понятна? или дописать для конкретно массива?

READ ALSO
Визуализация динамических структур C++ [требует правки]

Визуализация динамических структур C++ [требует правки]

ЗдравствуйтеПередо мной стоит задание визуализировать принцип работы динамических структур (списки, стеки, очереди

308
Использование в программе функций C++ [требует правки]

Использование в программе функций C++ [требует правки]

Помогите, чтобы программа была написана с помощью функции с++

240
обновление QTableView без записи в бд

обновление QTableView без записи в бд

Есть связка из QSqlTableModel и QTableViewВ программе я работаю с моделью

268
Использование std::find_if не для поиска

Использование std::find_if не для поиска

Сразу прощу прощения за такое туманное название, не знаю как в двух словах описать задачу

270