1
我试图实现使用SET返回一组集合的所有子集的问题。我的代码如下:从设置使用值或iteraor擦除元素
set< set<int> > getallsets(set<int> iset){
std::set< set<int> > sets;
std::set<int> nullset;
sets.insert(nullset);
if(iset.size() <= 0)
return sets;
if(iset.size() ==1){
sets.insert(iset);
return sets;
}
std::set<int>::iterator it = iset.begin();
set<int> niset = iset;
////////////////////////////
niset.erase(*it); // niset.erase(it); // Issue
///////////////////////////
sets = getallsets(niset);
std::set< set<int> >::iterator i;
std::set<int>::iterator j;
for(i = sets.begin();i !=sets.end();i++){
std::set<int> temp = *i;
temp.insert(*it);
sets.insert(temp);
}
return sets;
}
问题出现在突出显示的部分。当我使用(* it)擦除值时,我得到所需的集合。但如果我使用(它)通过有效的迭代器位置擦除。我没有得到期望的结果。 请帮我理解发生了什么。