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)擦除值時,我得到所需的集合。但如果我使用(它)通過有效的迭代器位置擦除。我沒有得到期望的結果。 請幫我理解發生了什麼。