做了一道有关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
中间的五丢了,想不通为什么?
提醒:STL是开源的。
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
第一次循环 insert 3 5 7 那么按照我的逻辑 set中存放的就是 3 5 7 啊,为什么it++ 以后输出的是7 呢