set两问(stl高手请进)

newbaby 2003-09-22 11:01:03
1.如何在遍历set的过程中对set进行插入或者删除操作?
我定义了一个int型的set,插入数据后要对set中的数据进行删除,如删除set中的奇数,我的代码如下:
for(set<int>::iterator i = int_set.begin(); i != int_set.end(); i++)
if(*i/2)
int_set.erase(i);
但是产生内存读写错误,是不是因为erase操作导致int_set.end()返回值变化了?如何修改代码使得在遍历set的过程删除不需要的元素?
2.对两个整形set做与,或,非等布尔运算,stl是否有直接操作的函数?
...全文
31 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
newbaby 2003-09-22
  • 打赏
  • 举报
回复
非常感谢topcat,第二点着急写错了,是集合的交,并,差。
我用的是VC6.0
Wolf0403 2003-09-22
  • 打赏
  • 举报
回复
第一个差点以为是 * 和 / 的优先级问题,试验表明不是,关注;
第二个,据我所知,没有。
另外,楼主用的什么编译器?为什么我这样写代码都无法编译通过?一定要把 i 的声明提前
TopCat 2003-09-22
  • 打赏
  • 举报
回复
1、没错,end()变化了,你倒过来用应该没错:
for(set<int>::iterator i = int_set.end(); i != int_set.begin(); --i)
if(*i%2) //这里原来怎么是除,写错了吧?
int_set.erase(i);
我用BCB+STLPort调试没有问题

2、集合的不叫“与、或、非”吧,下面这些算法可以求交集、并集、差集:
#include <algorithm>

set_union: 求并集
set_intersection:求交集
set_difference: 求差集
set_symmetric_difference: 求余集

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧