这是一个递归函数,我试图创建一个查找所有在STL集合中传递的子集。这两个参数是设置为搜索主题的STL,并且数字i> = 0指定子集应该有多大。如果整数大于那么设置,返回空子集递归查找子集
我不认为我正确地做到了这一点。有时候是对的,有时候不对。 stl集传入正常。
list<set<int> > findSub(set<int>& inset, int i)
{
list<set<int> > the_list;
list<set<int> >::iterator el = the_list.begin();
if(inset.size()>i)
{
set<int> tmp_set;
for(int j(0); j<=i;j++)
{
set<int>::iterator first = inset.begin();
tmp_set.insert(*(first));
the_list.push_back(tmp_set);
inset.erase(first);
}
the_list.splice(el,findSub(inset,i));
}
return the_list;
}
在附注中,作为提示,使用typedef。它会使你的代码更具可读性,并且更易于调试:'typedef std :: set int_set; typedef std :: list int_set_list;'即使在你的函数中:'typedef int_set :: iterator iterator'。然后使用它们;你的代码会更小,更清晰。 –
GManNickG
2009-10-20 01:51:58
注意:splice需要一个左值作为第二个参数,但是你给它一个右值。如果你可以编译它,这是由于一个(愚蠢的)编译器扩展。 – sellibitze 2009-10-20 08:09:40
尝试给你的函数一个更具描述性的名字和/或解释这个函数应该做什么。findSub听起来很无辜,但它实际上修改了给定的集合。另外inset.size()>我似乎不符合你的描述。你的意思是inset.size()> = i? – sellibitze 2009-10-20 08:12:35