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

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 15:03
    关注

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

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

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 修改了问题 3月11日
  • 创建了问题 3月11日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?