常用的查找find
- find算法查找元素
@param beg容器开始迭代器
@param end 容器结束迭代器
@param value 查找的元素
@return返回查找元素的位置,失败:返回v.end();
find( iterator beg, iterator end ,value );
vector<int> v1 ;
v1.push_back(10) ;
vl.push_back(20) ;
v1.push_back(30) ;
v1.push_back(40) ;
vector<int> :: iterator ret;
ret = find(v1.begin() ,v1.end() ,200) ;
if(ret != v1.end() )
{
cout<<"找到的数据为:"<<*ret<<endl;
}
查找自定义类型
class Person
{
public:
string name;
int age;
public:
Person(string name,int age)
{
this->name = name ;
this->age = age;
}
bool operator==(const Person &ob) .
{
if (this->name == ob.name && this->age==ob.age)
return true ;
return false ;
}
};
vector<Person> v2;
v2. push_back(Person(" 德玛西亚" ,18)) ;
v2. push_back(Person("小法" ,19)) ;
v2. push_back(Person("小炮" ,20)) ;
v2. push_back(Person("牛头",21)) ;
Person tmp("小炮" ,20) ;
vector<Person> :: iterator ret2 ;
ret2 = find(v2 . begin() ,v2.end(),tmp) ;
if(ret2 != v2.end())
{
cout<<"找到的数据name="<<(*ret2).name<<",age="<<(*ret2) .age<<endl;
}
find_if
通过普通函数:
bool myGreaterThan20(int val)
{
return val>20;
}
通过仿函数:
class myGreaterThan20
{
public:
bool operator()(int val)
{
return val>20;
}
};
void test04( )
{
vector<int> v1;
v1.push_back(10) ;
v1.push_back(20) ;
v1.push_back(30) ;
v1.push_back(40) ;
vector<int>:: iterator ret;
ret = find_if(v1.begin() ,v1.end(),myGreaterThan20 ) ;
或
ret = find_if(v1.begin() ,v1.end(),myGreaterThan20() ) ;
if(ret != v1.end())
{
cout<<"寻找到的数据为:"<<*ret<<endl ;
}
}
adjacent_find
- adjacent_find 算法查找相邻重复元素
@param beg容器开始迭代器
@param end容器结束迭代器
@param _callback 回调时数或者谓词(返问/ bool类型的的数对象)
@return返回相邻元素的第一个位置的迭代器
adjacent_find( iterator beg, iterator end, _callback);
- 例子等同于上述函数,自定义类型需要回调函数。
- 下面的自定义类型通过内存比较,所以不需要写回调函数。
vector<Person> v2 ;
v2.push_back(Person(" 德玛西亚" ,18)) ;
v2.push_back(Person("小法" ,19) ) ;
v2.push_back(Person("小法", 19));1 [
v2.push_back(Person("牛头" ,21)) ;
vector<Person> ::iterator ret2 ;
ret2 = adjacent_find(v2.begin() ,v2.end()) ;
if(ret2 != v2.end())
cout<<"寻找到重复的数据:"<<(*ret2) .name<<" "<<(*ret2) . age< <endl ;
binary_search二分法查找(容器有序)
- binary_ search算汰二 分查找法
注意:在无序序列中不用
@param beg容器开始迭代器
@param end容器结束迭代器
@param value 查找的元素
@return bool查找到返回true,否则false
bool binary_search(iterator beg, iterator end, value);
count
count(iterator begin, iterator end, n);
count_if
count(iterator begin, iterator end, callback);
count(iterator begin, iterator end, bind2nd(greater<int>(),10));