std::lower_bound和st::upper_bound详细使用说明请看代码
//
#include
#include
#include
#include
//lower_bound的作用是返回第一个不满足比较操作的迭代器,如果序列是升序排列,则比较操作符只能是<或<=;如果是降序排列,比较操作符只能是>或>=
//
//upper_bound的作用是返回第一个满足比较操作的迭代器,如果序列是升序排列,则比较操作符只能是>或>=;如果是降序排列,比较操作符只能是<或<=
//注意:上述的比较操作符左侧都是迭代器,右侧都是某个值,但lower_bound的比较函数的第一个参数是迭代器,第二个参数是某值;而upper_bound正好相反。
//详细情况请参考代码
//有问题可留言或加qq群:1032082534
void printvector(std::vector<int>& v){
for(auto it=v.begin();it!=v.end();++it){
std::cout<<*it<<" ";
}
std::cout<<std::endl;
}
struct lesseq {
bool operator()( int iterator, int val) {
return iterator <= val;
}
};
struct less {
bool operator()( int iterator, int val) {
return iterator < val;
}
};
struct greatereq {
bool operator()( int iterator, int val) {
return iterator >= val;
}
};
struct greater {
bool operator()( int iterator, int val) {
return iterator > val;
}
};
struct lesseq2 {
bool operator()( int val, int iterator) {
return iterator<=val;
}
};
struct less2 {
bool operator()( int val, int iterator) {
return iterator<val;
}
};
struct greatereq2 {
bool operator()( int val, int iterator) {
return iterator>=val;
}
};
struct greater2 {
bool operator()( int val, int iterator) {
return iterator>val;
}
};
int main()
{
std::vector<int> aa{1,1,1,2,2,2,2,2,3,6};
printvector(aa);
auto it=std::lower_bound(aa.begin(),aa.end(),2,less());
std::cout <<"第一个不满足条件(条件是 <2)的元素索引:"<<it-aa.begin() << std::endl;
it=std::lower_bound(aa.begin(),aa.end(),2,lesseq());
std::cout <<"第一个不满足条件(条件是<=2)的元素索引"<<it-aa.begin() << std::endl;
it=std::upper_bound(aa.begin(),aa.end(),2,greatereq2());
std::cout <<"第一个满足条件(条件是>=2)的元素索引"<<it-aa.begin() << std::endl;
it=std::upper_bound(aa.begin(),aa.end(),2,greater2());
std::cout <<"第一个满足条件(条件是>2)的元素索引"<<it-aa.begin() << std::endl;
std::reverse(aa.begin(),aa.end());
printvector(aa);
auto it2=std::lower_bound(aa.begin(),aa.end(),2,greatereq());
std::cout <<"第一个不满足条件(条件是>=2)的元素索引"<<it2-aa.begin() << std::endl;
it2=std::lower_bound(aa.begin(),aa.end(),2,greater());
std::cout <<"第一个不满足条件(条件是>2)的元素索引"<<it2-aa.begin() << std::endl;
it=std::upper_bound(aa.begin(),aa.end(),2,lesseq2());
std::cout <<"第一个满足条件(条件是<=2)的元素索引"<<it-aa.begin() << std::endl;
it=std::upper_bound(aa.begin(),aa.end(),2,less2());
std::cout <<"第一个满足条件(条件是<2)的元素索引"<<it-aa.begin() << std::endl;
}
// GCC reference:
// https://gcc.gnu.org/
// C++ language references:
// https://cppreference.com/
// https://isocpp.org/
// http://www.open-std.org/jtc1/sc22/wg21/
// Boost libraries references:
// https://www.boost.org/doc/
运行结果:
1 1 1 2 2 2 2 2 3 6
第一个不满足条件(条件是 <2)的元素索引:3
第一个不满足条件(条件是<=2)的元素索引8
第一个满足条件(条件是>=2)的元素索引3
第一个满足条件(条件是>2)的元素索引8
6 3 2 2 2 2 2 1 1 1
第一个不满足条件(条件是>=2)的元素索引7
第一个不满足条件(条件是>2)的元素索引2
第一个满足条件(条件是<=2)的元素索引2
第一个满足条件(条件是<2)的元素索引7