c++ 中的动态嵌套?

发布于 2024-11-29 02:06:06 字数 275 浏览 0 评论 0原文

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

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

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

I have a list of list . All elements will be inserted at run-time. i wish to try all combinations through all list. So the simple solution comes to mind as

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

But i dont know the number of fors required at compile time. So how do i iterate through all pairs within c++?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦言归人 2024-12-06 02:06:06

使用递归。

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

Use recursion.

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>());
}
笑红尘 2024-12-06 02:06:06

使用递归

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

Using recursion

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);
           }
     }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文