小单同学shan 2022-03-11 06:36 采纳率: 100%
浏览 27
已结题

c++在set中用upper_bound函数 和 迭代器++ 值不同

问题遇到的现象和发生背景

做了一道有关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
中间的五丢了,想不通为什么?

我的解答思路和尝试过的方法
我想要达到的结果

展开全部

  • 写回答

2条回答 默认 最新

  • 赵4老师 2022-03-11 07:03
    关注

    提醒:STL是开源的。
    单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月11日
  • 修改了问题 3月11日
  • 创建了问题 3月11日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部