equal_range发生错误

本文通过实例演示了C++标准库中equal_range()函数的使用方法。该函数用于搜索有序区间内特定值的第一个和最后一个出现位置,适用于重复元素的查找场景。文章详细展示了如何在数组及vector中应用此函数,并对比了查找存在的值与不存在的值时的不同结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
equal_range():
返回一个迭代器的pair对象;
第一个表示由lower_bound()返回的iterator
第二个表示由upper_bound()返回的iterator
lower_bound() 和 upper_bound():
lower_bound(k) 查找第一个与键 k 关联的值,
而 upper_bound(k) 是查找第一个键值比 k 大的元素。
如果lower_bound()和upper_bound()查找失败则应该返回这个元素应该插入的位置
ia[]={12,15,17,19,20,22,23,26,29,35,40,51};
 
如果用21测试, 这两个迭代器都将指向22
如果用22测试 ,lower_bound()返回的迭代器指向22
               upper_bound()返回的迭代器指向23
第一个版本的使用 底层的小于号排序
第二个版本使用pred操作
equal_range(first,last,val,pred)

*/
#include<algorithm>
#include<vector>
#include<iterator>
#include<utility>// 引进了pair(arg,arg1)
#include<iostream>
using namespace std;

int main(){
int ia[]={29,23,20,22,17,15,26,51,19,12,35,40};
vector<int>ivec(ia,ia+12);
ostream_iterator<int> ofile(cout," ");
sort(ia,ia+12);
cout<<"array_elem after sort();"<<endl;
copy(ia,ia+12,ofile);
cout<<endl;
pair<int*,int*> ia_iter;
ia_iter=equal_range(ia,ia+12,23);
cout<<"equal_range result of search for value 23 :/n/t"
    <<"ia_iter.first: "<<*ia_iter.first<<endl
    <<"ia_iter.last: "<<*ia_iter.second<<endl;
   
ia_iter=equal_range(ia,ia+12,21);
cout<<"equal_range result of search for absent value 21 :/n/t"
    <<"ia_iter.first: "<<*ia_iter.first<<endl
    <<"ia_iter.last: "<<*ia_iter.second<<endl;
copy(ivec.begin(),ivec.end(),ofile);
cout<<endl
    <<"ivec after sort"<<endl;
sort(ivec.begin(),ivec.end(),less<int>());
cout<<"vector elem sequence after sort"<<endl;
copy(ivec.begin(),ivec.end(),ofile);
cout<<endl;
typedef vector<int>::iterator iter_ivec;
pair<iter_ivec,iter_ivec> ivec_iter;
ivec_iter=equal_range(ivec.begin(),ivec.end(),26,less<int>());
cout<<"equal_range result of search for value 26:/n/t"
    <<"ivec_iter.first: "<<*ia_iter.first<<endl
    <<"ivec_iter.second: "<<*ia_iter.second<<endl;

ivec_iter=equal_range(ivec.begin(),ivec.end(),21,less<int>());
cout<<"equal_range result of search for absent value 21 :/n/t"
    <<"ivec_iter.first: "<<*ia_iter.first<<endl
    <<"ivec_iter.second: "<<*ia_iter.second<<endl;
   
system("pause");   
return 0;   
}
 
输出:
第一个是 23,26
第二个是22,22
第三个是 22,22
第四个是22,22
根据lower_bound()和upper_bounder的定义
第三个和第四个发生错了。。。
错在什么地方了呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值