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

如何修正C++中变量与vector元素比较时的判断逻辑错误?

问题分析与修复

错误根源

你的代码里if (y == in)这个判断逻辑完全错误:in是循环读入元素时最后一次赋值的变量,它仅保存了输入的最后一个数值,和y是否存在于vector中没有任何关联。哪怕vector里根本没有16,只要最后输入的元素是16,程序就会错误进入if分支。

修复方案

要正确判断y是否存在于排序后的vector中,需要利用lower_bound返回的迭代器特性:lower_bound会返回有序容器中第一个**不小于目标值y**的元素迭代器。判断逻辑改为:

  • 首先确认迭代器未指向容器末尾(low != v.end())
  • 再确认迭代器指向的元素等于y(*low == y)

只有同时满足这两个条件,才能说明y存在于vector中。

修正后的完整代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v;
    int n, in;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> in;
        v.push_back(in);
    }
    sort(v.begin(), v.end());
    int y;
    cin >> y;
    vector<int>::iterator low = lower_bound(v.begin(), v.end(), y);
    
    if (low != v.end() && *low == y) {
        cout << "Yes" << " " << (low - v.begin() + 1) << "\n";
    } else {
        cout << "No" << " " << (low - v.begin() + 1) << "\n";
    }
    
    return 0;
}

补充说明

  • 计算位置时low - v.begin() + 1是正确的,因为题目要求输出从1开始的索引位置
  • 如果y不存在,lower_bound返回的迭代器指向第一个大于y的元素,此时输出的位置就是y应该插入的位置,符合题目需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:23:12