c++自帶的查找函數(shù)詳解
一、binary_search
使用binary_search查找必須是排好序的才行。使用下面三個(gè)函數(shù)都需要先排一遍序
//這三個(gè)函數(shù)都有三個(gè)參數(shù):分別為數(shù)組的起始位置、數(shù)組的終止位置(取不到)以及要查找的目標(biāo)值,
lower_bound():返回大于或等于目標(biāo)值的第一個(gè)位置
upper_bound():返回大于目標(biāo)值的第一個(gè)位置
//返回值為物理地址,因此要獲得對(duì)應(yīng)的邏輯地址,需要減去數(shù)組的起始位置。
binary_search():若目標(biāo)值存在則返回true,否則返回false
可以看到,下面的numList2沒有排好序,導(dǎo)致三個(gè)函數(shù)的返回值都是錯(cuò)誤的。
#include<iostream> #include<algorithm> using namespace std; int main() { /*排好序的*/ int numList1[5] = { 1,2,3,4,5 }; int n1 = 2; /*亂序的*/ int numList2[5] = { 1,3,2,4,5 }; int n2 = 2; cout << binary_search(numList1, numList1 + 5, n1) << endl; //true cout << binary_search(numList2, numList2 + 5, n1) << endl; //false //返回值為物理地址,因此要獲得對(duì)應(yīng)的邏輯地址,需要減去數(shù)組的起始位置。 cout << lower_bound(numList1, numList1 + 5, n1)- numList1 << endl; //1 cout << upper_bound(numList1, numList1 + 5, n1)- numList1 << endl; //2 cout << lower_bound(numList2, numList2 + 5, n1)- numList2<< endl; //1 cout << upper_bound(numList2, numList2 + 5, n1) - numList2 << endl; //3 }
二、find
即便不排序也可以正常用。
數(shù)組的find
/*亂序的*/ int numList2[5] = { 1,3,2,4,5 }; int n2 = 2; int* pos = find(numList2, numList2 + 5, 2); //若找到,則返回物理地址,需要減去首地址以獲得下標(biāo) if (pos == (numList2 + 5)) { cout << "Couldn't find it"; } else cout << pos - numList2; //返回下標(biāo)
字符串的find
string str = "abcd"; if (find(str.begin(), str.end(), 'a') != str.end()) //使用迭代器 cout << "Find it!"; else cout << "Couldn't find it!"; // 或者 string str = "abcd"; cout << str.find('a'); //返回的是下標(biāo)的值而不是上面的指針或是迭代器
到此這篇關(guān)于c++自帶的查找函數(shù)的文章就介紹到這了,更多相關(guān)c++查找函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
虛函數(shù)表-C++多態(tài)的實(shí)現(xiàn)原理解析
這篇文章主要介紹了虛函數(shù)表-C++多態(tài)的實(shí)現(xiàn)原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02C++11 std::shared_ptr總結(jié)與使用示例代碼詳解
這篇文章主要介紹了C++11 std::shared_ptr總結(jié)與使用,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Qt實(shí)現(xiàn)自定義驗(yàn)證碼輸入框控件的方法
本文主要介紹了Qt實(shí)現(xiàn)自定義驗(yàn)證碼輸入框控件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)的源碼分享
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C語言實(shí)現(xiàn)英文文本詞頻統(tǒng)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)英文文本詞頻統(tǒng)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03C++使用string的大數(shù)快速模冪運(yùn)算(6)
這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)快速模冪運(yùn)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09