equal_range发生错误

/*
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的定义
第三个和第四个发生错了。。。
错在什么地方了呢?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值