如何修正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
相关产品推荐
相关产品推荐

