zoukankan      html  css  js  c++  java
  • C++中二分法之upper_bound()、lower_bound、binary_search()函数

    前言

    1. 数组、容器vector都适用,在头文件"algorithm"中
    2. 下面的例子是针对容器的,注意返回的是距离元素3最近的指针it,输出的是*it结果为元素4,假如我想得到位置而非具体的元素应该怎么办呢?这里有一个指针偏移的技巧,只需要减去起始位置的指针即可
    #include<iostream> 
    #include<vector> 
    #include<algorithm> 
    using namespace std; 
    vector<int> v; 
    int main() 
    { 
        for (int i = 1; i < 4; i++) 
            v.push_back(2 * i);//注意此时v中的元素本身就是有序的 
        vector<int>::iterator it = lower_bound(v.begin(), v.end(), 3); 
        cout << *it << endl; 
        return 0; 
    } 
    
    1. 下面中的例子这里给出:
    #include<iostream>
    #include<algorithm>
    #include<vector>
    int test[11] = {1, 1, 3, 3, 6, 7, 8, 8, 8, 9, 10};
    using namespace std;
    int main(){
    	int pos1 = lower_bound(test, test+11, 8) - test;
    	int pos2 = upper_bound(test, test+11, 8) - test;
    	int pos3 = lower_bound(test, test+11, 5) - test;
    	int pos4 = upper_bound(test, test+11, 5) - test;
    	bool a = binary_search(test, test+11, 5);
    	bool b = binary_search(test, test+11, 3);
    	cout << "pos1: " << pos1 << endl;
    	cout << "pos2: " << pos2 << endl;
    	cout << "pos3: " << pos3 << endl;
    	cout << "pos4: " << pos4 << endl;
    	cout << "a: " << a << endl;
    	cout << "b: " << b ;
    	return 0;
    }
    

    输出结果:

    一、upper_bound(起始地址,结束地址,要查找的数值)

    1. 功能:返回数组或容器中大于指定元素的下标(使用指针偏移技巧)或数值。
    2. 例子见前言,仔细思考。

    二、lower_bound(起始地址,结束地址,要查找的数值)

    1. 功能:返回数组或容器中大于等于指定元素的下标(使用指针偏移技巧),如果出现相同的元素恰是指定元素即返回第一个等于元素的下标。
    2. 例子见前言,仔细思考。

    三、binary_search(起始地址,结束地址,要查找的数值)

    1. 功能:查看数组或容器中指定元素是否存在,bool类型,存在返回1,否则返回0。
    2. 例子见前言,仔细思考。
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    常用编码格式算法
    js显示当前时间
    客户端和服务器端乱码问题
    常用的小技巧
    开发jsp中常用标签
    java中的反射
    java中的单例设计模式
    java中的枚举类
    关于继承时构造方法的问题
    TCP三次握手和四次握手全过程 为什么要三次握手而不是二次握手?
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11858226.html
Copyright © 2011-2022 走看看