使用value或iteraor从集合中擦除元素
Erasing element from a Set using value or iteraor
我试图实现使用set返回集合的所有子集的问题。我的代码如下:
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)按值擦除时,我得到了所需的集合。但如果我使用(它)通过迭代器位置擦除,这是有效的。我没有得到想要的结果。请帮我了解发生了什么。
std::set<int>::iterator it = iset.begin();
it
是属于iset
的迭代器(不是指针!)。尝试将其与niset
一起使用是未定义的行为。
你可以通过以下操作获得你想要的行为:
set<int> niset = iset;
std::set<int>::iterator it = niset.begin();
niset.erase(it); // Issue
相关文章:
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 为什么在功能内擦除元素后不列出更新?
- 在任一方向上迭代容器并擦除元素
- 从向量和对向量中擦除元素的差异
- 从地图上擦除元素,然后将其放回原处
- 迭代一组和擦除元素
- 使用常量键从集合中擦除元素
- 从向量中擦除元素是否也会擦除元素中存在的所有成员向量
- 如何更有效地从向量或集合中擦除元素?
- 在尝试擦除元素之前,我们是否需要检查unordered_set是否包含元素
- 从矢量中最快的擦除元素或更好地利用内存(排序基数)
- 迭代地图和擦除元素
- 迭代时从 STL 容器中查找并擦除元素
- 在 c++ 中从列表中擦除元素时出现问题
- C++嵌套的带有擦除元素的循环
- 矢量2D擦除元素并保持字段为空
- 比较第一个向量的不同矢量迭代器和擦除元素
- 从多维矢量中擦除元素
- 根据属性值在结构向量中擦除元素
- 从hash_map内的列表中擦除元素