Динамическая вложенность в с ++? - PullRequest
1 голос
/ 12 августа 2011

У меня есть список списка. Все элементы будут вставлены во время выполнения. Я хочу попробовать все комбинации по всему списку. Таким образом, простое решение приходит на ум как

for ( l1 in L1)   
{   for ( l2 in L2)   
    { for ( l3 in L3)  
          { 
               ... // use the pair (l1,l2,l3) 
          }
    }
}

Но я не знаю, сколько форов требуется во время компиляции. Итак, как мне перебрать все пары в c ++?

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Использование рекурсии

void recursion(** lists,* list,depth)
{
     if(depth == -1 ) 
     {
          use_pair(list)
     }
     else
     {
           for(i in lists[depth])
           {
                list[depth] = i;
                recursion(lists,list,depth-1);
           }
     }
}
3 голосов
/ 12 августа 2011

Использовать рекурсию.

typedef std::list<std::list<int>> ListOfList;

void actOnHelper(ListOfList::const_iterator c, ListOfList::const_iterator end, std::list<int> v)
{
   if (c == e) {
      // do something on v
   } else {
      ListOfList::const_iterator nextc(c);
      ++nextc;
      for (std::list<int>::const_iterator i = c->begin(), e = c->end(); i != e; ++i) {
        v.push_back(*i);
        actOnHelper(nextc, end, v);
        v.pop_back();
     }
   }
}
void actOn(std::list<std::list<int>> const& l)
{
   actOnHelper(l.begin(), l.end(), std::list<int>());
}
...