一蜘猫 2022-11-07 15:05 采纳率: 75%
浏览 20
已结题

c++ find_if()函数查找自定义类型时返回的结束迭代器在for循环中不能结束循环?

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

c++ find_if()函数查找自定义类型时返回的结束迭代器在for循环中不能结束循环

用代码块功能插入代码,请勿粘贴截图
// 对于基本数据类型没有问题
    for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
    {
        it = find_if(it, v1.end(), find2X); // 返回符合的迭代器(2的倍数)
        if (it != v1.end())
        {
            cout << "Find!" << (*it) << endl;
        }
        cout << endl;
    }
// 自定义数据
    for (vector<Person>::iterator itc = vc.begin(); itc != vc.end(); itc++) // 遍历
    {
        // ??? find_if 返回的结束迭代器在if(itc != vc.end())中为true,在for中 itc != vc.end() ==false

        itc = find_if(itc, vc.end(), findCPerson5X); // 返回符合的迭代器
        if (itc != vc.end())
            cout << "找到" << itc->m_Name << ":" << itc->m_Age << endl;
        cout << endl;
    }
运行结果及报错内容

img

img

我想要达到的结果

为什么返回的结束迭代器在if(itc != vc.end())中为true,在for中 itc != vc.end() 为false

  • 写回答

1条回答 默认 最新

  • 爱晚乏客游 2022-11-07 15:13
    关注

    ?你在想什么?每次find_if都将你的itc的结果改掉了,你相当于两个地方修改itc,一个是for循环中的++,一个是find_if,如果没有找到元素,itc就等于end了,所以没找到的话,itc=vc.end()了,就出现你上面的问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭