我有一份清单。所有元素都将在运行时插入。我希望通过所有列表尝试所有组合。因此,想到简单的解决方案
for ( l1 in L1)
{ for ( l2 in L2)
{ for ( l3 in L3)
{
... // use the pair (l1,l2,l3)
}
}
}
但我不知道编译时所需的数量。那么我如何迭代c ++中的所有对?
答案 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);
}
}
}