다음은 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
side note : splice는 lvalue를 두 번째 매개 변수로 사용하지만 rvalue를 지정하고 있습니다. 이것을 컴파일 할 수 있다면 컴파일러 확장 (어리석은) 때문입니다. – sellibitze
함수에 더 알기 쉬운 이름을 지정하거나이 함수가 정확히 무엇을하기로되어 있는지 설명하십시오.findSub는 결백 한 소리를 내지 만 실제로 주어진 세트를 수정했습니다. 또한 inset.size()> 나는 귀하의 설명과 일치하지 않는 것 같습니다. inset.size()> = i를 의미 했습니까? – sellibitze