c++ - lower_bound 函数返回错误的迭代器
问题描述
在下面的代码中,7 和 4 都返回相同的值,即 2,同时每个 else 数字都返回正确的索引
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(7);
v.push_back(4);
v.push_back(9);
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),7)-v.begin()<<endl;
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),4)-v.begin()<<endl;
}
输出:
lower bound : 2
lower bound : 2
我不明白代码有什么问题。
解决方案
vector
应该提前排序。例如
std::sort(v.begin(), v.end());
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),7)-v.begin()<<endl; // ->3
cout<<"lower bound : "<<lower_bound(v.begin(),v.end(),4)-v.begin()<<endl; // ->2
推荐阅读
- java - Hazelcast 存储大型对象导致高延迟问题
- c - 以太网控制器中的硬件 Rx/Tx 队列是什么
- html - 具有滚动和绝对位置的 CSS 粘性表格标题
- json - ambari 蓝图安装失败 - 配置类型未在堆栈中定义
- amazon-web-services - Cloudwatch 代理未将日志发送到 cloudwatch
- jenkins - 詹金斯从传递的参数中删除密码
- javascript - 如何为我的应用程序中需要它的所有 React 组件提供窗口宽度?
- php - 如何在 Woocommerce 产品循环中添加自定义 AJAX 减少按钮?
- spring - Maven mvn spring-boot:run - 找不到本地库,在命令行上失败,但在 STS4 中运行
- iis - Web平台安装程序安装wordpress错误密码错误的问题