Надо написать функцию следующего вида: на вход подаётся массив 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]);
Рекурсия, она спасает и не в таких ситуациях :)
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;
}
Идея понятна? или дописать для конкретно массива?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости