在c ++中动态嵌套?

时间:2011-08-12 15:52:30

标签: c++ dynamic nested

我有一份清单。所有元素都将在运行时插入。我希望通过所有列表尝试所有组合。因此,想到简单的解决方案

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

但我不知道编译时所需的数量。那么我如何迭代c ++中的所有对?

2 个答案:

答案 0 :(得分:3)

使用递归。

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>());
}

答案 1 :(得分:3)

使用递归

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);
           }
     }
}