You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++传入匿名lambda调用vector筛选函数无输出问题排查

问题根因

程序无输出的核心原因是传入的lambda筛选逻辑完全写反了:你当前的代码筛选的是同时能被2、3、5整除的数,而题目要求筛选不能被2、3、5任意一个整除的数,测试用例中不存在满足你当前筛选条件的数,因此结果数组为空,自然没有打印内容。

那个有符号/无符号不匹配的警告是循环变量类型问题,不会影响本次运行结果,把循环变量i声明为size_t类型即可消除。

逻辑错误说明

你写的lambda返回语句return !(x % 2 || x % 3 || x % 5);实际行为如下:

  • 对整数取余运算,余数为0代表可被整除,对应布尔值false;余数非0代表不可被整除,对应布尔值true
  • 只有当x%2、x%3、x%5全为0(即x同时是2、3、5的公倍数,最小为30)时,括号内的或运算结果才为false,取反后得到true,该数才会被加入结果集
  • 你提供的测试数组中没有30的倍数,因此结果数组长度为0,循环打印不会执行任何输出。
修复代码

将lambda判断条件改为「对2、3、5取余均不为0」即可,两种等价写法任选其一:

// 写法1:直接判断所有余数非0
vector<int> rez = izdvoji(brojevi, [](int x) -> bool {
    return x % 2 != 0 && x % 3 != 0 && x % 5 != 0;
});

// 写法2:通过德摩根定律改写,逻辑和写法1完全一致
vector<int> rez = izdvoji(brojevi, [](int x) -> bool {
    return !(x % 2 == 0 || x % 3 == 0 || x % 5 == 0);
});

替换后运行即可得到预期输出:1 7 23 1 1 433 7 433

内容的提问来源于stack exchange,提问作者Sadlyfe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 13:12:27