问题遇到的现象和发生背景
做了一道有关set的题 set不是自动去重复排序吗 这里我一开始想的是 直接把指针++ 这样就可以找到 第一个比前一个元素大的那个元素了,和upper_bound不是一样的效果吗?但是,用指针和upper_bound的值不同
问题相关代码,请勿粘贴截图
#include<set>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
set<LL> s;
set<LL> ::iterator it=s.begin();
const LL mod=59084709587505;
int main(){
int a[]={3,5,7};
LL t=1;
while(1){
for(int i=0;i<3;i++){
LL tt=t*a[i];
if(tt<=mod){
s.insert(tt);
}
}
t=*(s.upper_bound(t));
//t=*it;
cout<<t<<" ";
//it++;
if(t>=mod){
break;
}
}
return 0;
}
运行结果及报错内容
代码中我注释掉的就是原来的方案 但是这两种写法答案 不同。用upper_bound可以得到正确输出,如:3 5 7 9.
但是 用*it,输出的是:3 7 9 15 21 27 35 45 49 63
中间的五丢了,想不通为什么?