STL中二分查詢函式
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a[12] = {1,6,31,66,67,68,69,70,71,73,76,79}; int c[12] = {79,76,73,71,70,69,68,67,66,31,6,1}; vector<int> b; b.push_back(1); b.push_back(6); b.push_back(31); b.push_back(66); b.push_back(67); b.push_back(68); b.push_back(69); b.push_back(70); b.push_back(71); b.push_back(73); b.push_back(76); b.push_back(79); int n;
binary_search(b.begin(),b.end(),n)//返回得是bool值,也適用於陣列,用於判斷有沒有找到
if(binary_search(a,a+12,n))printf("find %d\n",n); else printf("%d is not in array\n"); if(binary_search(b.begin(),b.end(),n))printf("find %d\n",n); else printf("%d is not in array\n",n);*/ >>> 66 find 66 find 66 99 6422256 is not in array 99 is not in array
lower_bound(b.begin(),b.end(),n);//返回得是迭代器,也適用於陣列(用對應型別得指標接著就好),用於查詢第一個不小於n得值得位置(p-1就是第一個比n小的索引了)
int *p; vector<int>::iterator it; p = lower_bound(a,a+12,n); if(p != a + 12) { printf("The first num which is bigger(or equal) than %d is %d,index is : %d\n",n,*p,(p - a)); } else printf("Not found!\n"); it = lower_bound(b.begin(),b.end(),n); if(it != b.end()) { printf("The first num which is bigger(or equal) than %d is %d,index is : %d\n",n,*it,distance(b.begin(),it)); } else printf("Not found!\n"); >>> 6 The first num which is bigger(or equal) than 6 is 6,index is : 1 The first num which is bigger(or equal) than 6 is 6,index is : 1 1 The first num which is bigger(or equal) than 1 is 1,index is : 0 The first num which is bigger(or equal) than 1 is 1,index is : 0 0 The first num which is bigger(or equal) than 0 is 1,index is : 0 The first num which is bigger(or equal) than 0 is 1,index is : 0 99 Not found! Not found!
upper_bound(b.begin(),b.end(),n);//返回得是迭代器,也適用於陣列(用對應型別得指標接著就好),用於查詢第大於n得值得位置
int *p;
vector<int>::iterator it;
p = upper_bound(a,a+12,n);
if(p != a+12)
{
printf("The first num which is bigger than %d is %d,index is : %d\n",n,*p,(p - a));
}
else printf("Not found!\n");
it = upper_bound(b.begin(),b.end(),n);
if(it != b.end())
{
printf("The first num which is bigger than %d is %d,index is : %d\n",n,*it,distance(b.begin(),it));
}
else printf("Not found!\n");*/
>>>
6
The first num which is bigger than 6 is 31,index is : 2
The first num which is bigger than 6 is 31,index is : 2
78
The first num which is bigger than 78 is 79,index is : 11
The first num which is bigger than 78 is 79,index is : 11
79
Not found!
Not found!
對於lower_bound & upper_bound()還有一個第四個引數greater<type>(),他會把不小於變為不大於得查詢,把大於變為小於得查詢,但是相反,他要求得順序不是遞增,而是遞減!!!
int *p = lower_bound(c,c+12,n,greater<int>());//傳入第四個引數,查詢第一個小於等於n得值
if(p != c+12)
{
printf("The first num which is smaller(or equal) than %d is %d,index is : %d\n",n,*p,(p - c));
}
else printf("Not found!\n");
>>>
6
The first num which is smaller(or equal) than 6 is 6,index is : 10
5
The first num which is smaller(or equal) than 5 is 1,index is : 11
0
Not found!
忘了提一下distence函式他是用於迭代器得用於計算他們之間的距離~~~(注意好傳值的先後順序)
相關推薦
STL中二分查詢函式
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int a[12] = {1,6,31,66
對標準庫stdlib.h中二分查詢的理解
前幾天面試的時候遇到了這個問題 ,標準庫下提供的二分查詢改錯,當時沒有改出來,寫得不好,回來查了下,這個函式的原型是: /* bsearch() and qsort() are declared both here, in <stdlib.h>, and in * non-AN
折半查詢演算法及二分查詢函式及猜數字遊戲實現
折半查詢演算法 #include<stdio.h> int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int left = 0; int right = siz
c++中STL中的next_permutation函式基本用法
對於next_permutation函式是針對於排列組合問題的庫函式,它的排序方式是按照字典的方式排列的·: 如以下程式碼對於next_permutation函式的初步解釋: #include<cstdio> #include<cstring> #
二分查詢函式彙總
問題:A心裡想一個1-1000之間的數,B來猜,可以問問題,A只能回答是或否。怎麼猜才能問的問題次數最少? 思路:是1嗎?是2嗎?…是999嗎? 平均要問500次 大於500嗎?大於750嗎?大於625嗎? …每次縮小猜測範圍到上次的一半 只需要 10次 二分
STL中的sort函式實現原理
STL的sort()演算法,資料量大時採用Quick Sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免Quick Sort的遞迴呼叫帶來過大的額外開銷,就改用Insertion Sort(插入排序)。如果遞迴層次過深,還會改用Heap Sort。 STL中的sort並非只是
C++STL中全排列函式next_permutation的使用
next_permutation函式 組合數學中經常用到排列,這裡介紹一個計算序列全排列的函式:next_permutation(start,end),和prev_permutation(start,end)。這兩個函式作用是一樣的,區別就在於前者求的是當前
python中二分查詢
二分查詢也稱折半查詢,它的效率較高。但是二分查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。 寫二分查詢時有兩個方法,一個是用遞迴,一個不用遞迴。 用遞迴的方法如下 #coding:utf-8 def binary_search(alist,item): ""
Linux核心中的bsearch二分查詢函式
/* * bsearch - binary search an array of elements * @key: pointer to item being searched for * @base
C++string中的查詢函式find與find_first_of函式的區別
string (1) size_t find_first_of (const string& str, size_t pos = 0) const noexcept; c-string (2) size_t find_first_of (co
二分查詢函式binary_search
{ int position; T data; int bottom =0, top = size -1; while (bottom < top) ...{ int mid = (bottom + top) /2; data = arr[mid]; if
C++中二分查詢(遞迴,非遞迴)
二分查詢:二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。 二分查詢要求: 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。
mysql中時間查詢函式(包括時間戳)
這些函式都是MySQL自帶的,可以直接使用在PHP寫的MySQL查詢語句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURRENT_TIME() 這兩個函式是比較常用到的,顧名思義,第一個返回當前日期,第二個返回當前時間 可以在MySQL
資料結構——陣列(2)在有序數列中二分查詢
二分查詢的前提要求陣列有序, 查詢思想:每次將待查詢元素k和陣列中間位置mid元素對比,若相等,則查詢成功;若mid元素小於k,則k在陣列後半部分;若mid元素大於k,則在陣列前半部分。然後繼續以此方法搜尋。 實現方法包括:非遞迴法、遞迴法。 #inclu
STL中分解字串函式strtok
char *strtok(char *s, const char *delim); 分解字串為一組字串。s為要分解的字串,delim為分隔符字串。 strtok()用來將字串分割成一個個片段。引數s指向欲分割的字串,引數delim則為分割字串,當strtok()在引數s的字
過載實現:int char二分查詢. 函式模板 :對整型 浮點型 字元型 實現氣泡排序
程式:演算法+資料 C++語言的資料: 1、基本型別: 整型,浮點型,字元型,bool型別 2、變數:此塊空間的內容可改變 型別 變數名;//分配空間:以型別 初始化變數:在定義變數同時賦初值 引用:通過名字引用變數的內容
STL之二分查詢 (Binary search in STL)
正確區分不同的查詢演算法count,find,binary_search,lower_bound,upper_bound,equal_range本文是對Effective STL第45條的一個總結,闡述了各種查詢演算法的異同以及使用他們的時機。 首先可供查詢的演算法大致有c
C++STL中的upper_bound()函式的使用
首先要#include<algorithm>int a[];upper_bound(a+i,a+j,x)-a返回的是第一個大於x的數的座標upper_bound(a.begin(),a.end(),x)返回的是迭代器low_bound(first,last,x)返
STL中與二分查詢相關的4個函式
二分查詢的原理非常簡單,但寫出的程式碼中很容易含有很多Bug,二分查詢一文中講解過如何實現不同型別的二分查詢,但是否一定要自己去實現二分查詢呢?答案顯然是否定的,本文將講解STL中與二分查詢有關函式的具體使用方法及其實現原理。 函式使用 STL中與二分查詢相關的函式有
stl中的二分查找
sin search c++ 指向 元素 font sea lower 查找 binary_search 使用方式 binary_search(區間起始,區間結束後一個,要查找的元素。 #include<bits/stdc++.h> using namespa