STL教程(十二):C++ STL常用查找算法
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万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。