1、常用查找算法匯總
2、常用查找算法詳解
2.1find算法
/*
find算法 查找元素
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param value 查找的元素
@return 返回查找元素的位置
*/find(iterator beg, iterator end, value)
案例:
int main() {
vector<int> v1;
v1.push_back(10);
v1.push_back(50);
v1.push_back(30);
v1.push_back(40);
v1.push_back(20);
vector<int>::iterator ret;
ret = find(v1.begin(), v1.end(), 50);
if(ret != v1.end())
{
cout<<"尋找到結果為:"<<*ret<<endl;
} }
2.2find_if算法
/*
find_if算法 條件查找
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param callback 回調函數或者謂詞(返回bool類型的函數對象)
@return bool 查找返回true 否則false
*/find_if(iterator beg, iterator end, _callback);
案例:
bool geaterThan30(int val){
return val>30; } class GreaterThan30 {
public:
bool operator()(int val)
{
return val>30;
} };
int main() {
vector<int> v1;
v1.push_back(10);
v1.push_back(50);
v1.push_back(30);
v1.push_back(40);
v1.push_back(20);
vector<int>::iterator ret;
//尋找大于30的數
//ret = find_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 30));
//ret = find_if(v1.begin(), v1.end(), geaterThan30);
ret = find_if(v1.begin(), v1.end(), GreaterThan30());
if(ret != v1.end())
{
cout<<"找到:"<<*ret<<endl;
} }
2.3adjacent_find算法
/*
adjacent_find算法 查找相鄰重復元素
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param _callback 回調函數或者謂詞(返回bool類型的函數對象)
@return 返回相鄰元素的第一個位置的迭代器
*/adjacent_find(iterator beg, iterator end, _callback);
案例:
int main() {
vector<int> v1;
v1.push_back(10);
v1.push_back(30);
v1.push_back(30);
v1.push_back(40);
v1.push_back(20);
v1.push_back(20);
vector<int>::iterator ret;
ret = adjacent_find(v1.begin(), v1.end());
if(ret != v1.end())
{
cout<<"找到:"<<*ret<<endl;
} }
2.4binary_search算法
/*
binary_search算法 二分查找法
注意: 在無序序列中不可用
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param value 查找的元素
@return bool 查找返回true 否則false
*/bool binary_search(iterator beg, iterator end, value);
2.5count算法
/*
count算法 統計元素出現次數
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param value回調函數或者謂詞(返回bool類型的函數對象)
@return int返回元素個數
*/count(iterator beg, iterator end, value);
案例:
bool geaterThan30(int val){
return val>30; } class GreaterThan30 {
public:
bool operator()(int val)
{
return val>30;
} };
int main() {
vector<int> v1;
v1.push_back(10);
v1.push_back(30);
v1.push_back(30);
v1.push_back(40);
v1.push_back(20);
v1.push_back(30);
cout<<count(v1.begin(), v1.end(),30)<<endl;
}
2.6count_if算法
/*
count_if算法 統計元素出現次數
@param beg 容器開始迭代器
@param end 容器結束迭代器
@param callback 回調函數或者謂詞(返回bool類型的函數對象)
@return int返回元素個數
*/count_if(iterator beg, iterator end, _callback);
案例:
int main() {
vector<int> v1;
v1.push_back(10);
v1.push_back(30);
v1.push_back(30);
v1.push_back(40);
v1.push_back(20);
v1.push_back(30);
cout<<count_if(v1.begin(), v1.end(),bind2nd(greater<int>(),20))<<endl;
}
更多關于“智能物聯網培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。