adjacent_find()
在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(2);
vecInt.push_back(2);
vecInt.push_back(4);
vecInt.push_back(5);
vecInt.push_back(5);
vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end()); //*it == 2
binary_search
在有序序列中查找value,找到则返回true。注意:在无序序列中,不可使用。
set<int> setInt;
setInt.insert(3);
setInt.insert(1);
setInt.insert(7);
setInt.insert(5);
setInt.insert(9);
bool bFind = binary_search(setInt.begin(),setInt.end(),5);
count()
利用等于操作符,把标志范围内的元素与输入值比较,返回相等的个数。
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(2);
vecInt.push_back(2);
vecInt.push_back(4);
vecInt.push_back(2);
vecInt.push_back(5);
int iCount = count(vecInt.begin(),vecInt.end(),2); //iCount==3
count_if()
假设vector<int> vecIntA,vecIntA包含1,3,5,7,9元素
//先定义比较函数
bool GreaterThree(int iNum)
{
if(iNum>=3)
{
return true;
}
else
{
return false;
}
}
int iCount = count_if(vecIntA.begin(), vecIntA.end(), GreaterThree);
//此时iCount == 4
find()
- find: 利用底层元素的等于操作符,对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的迭代器。
- equal_range: 返回一对iterator,第一个表示lower_bound,第二个表示upper_bound。
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);
vector<int>::iterator it = find(vecInt.begin(), vecInt.end(), 5); //*it == 5
find_if()
find_if: 使用输入的函数代替等于操作符执行find。返回被找到的元素的迭代器。
假设vector<int> vecIntA,vecIntA包含1,3,5,3,9元素
vector<int>::it = find_if(vecInt.begin(),vecInt.end(),GreaterThree);
此时 *it==3, *(it+1)==5, *(it+2)==3, *(it+3)==9
#include <iostream>
using namespace std;
#include "string"
#include <vector>
#include <list>
#include "set"
#include <algorithm>
#include "functional"
#include "iterator" //输出流迭代器的头文件
//adjacent_find找到相邻的首次相等的两个元素,并且返回指向第一个元素的迭代器
void adjacent_find()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(2);
v1.push_back(3);
v1.push_back(5);
vector<int>::iterator it = adjacent_find(v1.begin(),v1.end());
if (it == v1.end())
{
cout << "没有找到重复的元素" << endl;
}
else
{
cout << *it << endl; //输出:2
}
int index = distance(v1.begin(),it); //返回下标
cout << index << endl; //输出:1 因为下标是从0开始的
}
//0 1 2 3 ...... n-1
//二分法 1K=1024 10次,速度快
void binary_search()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
v1.push_back(9);
bool b = binary_search(v1.begin(),v1.end(),7);
if (b == true)
{
cout << "找到了" << endl; //输出:找到了
}
else
{
cout << "没到了" << endl;
}
}
//统计
void count()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
v1.push_back(7);
v1.push_back(9);
v1.push_back(7);
int num = count(v1.begin(),v1.end(),7);
cout << num << endl; //输出:3
}
//一元谓词
bool GreatThree(int iNum)
{
if (iNum > 3)
{
return true;
}
return false;
}
//有条件的统计
void count_if()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
v1.push_back(7);
v1.push_back(9);
v1.push_back(7);
//一元谓词做回调函数
int num = count_if(v1.begin(),v1.end(),GreatThree);
cout << "num: " << num << endl; //输出: num:5
}
//查找
void find()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
v1.push_back(7);
v1.push_back(9);
v1.push_back(7);
vector<int>::iterator it = find(v1.begin(),v1.end(),5);
if (it == v1.end())
{
cout << "没有找到" << endl;
}
else
{
cout << "*it: " << *it << endl; //输出:5
}
}
//有条件的查找
void find_if()
{
vector<int> v1;
v1.push_back(1);
v1.push_back(3);
v1.push_back(5);
v1.push_back(7);
v1.push_back(7);
v1.push_back(9);
v1.push_back(7);
//第一个大于3的位置
vector<int>::iterator it2 = find_if(v1.begin(),v1.end(),GreatThree);
if (it2 == v1.end())
{
cout << "查找不到" << endl;
}
else
{
cout << "*it2:" << *it2 << endl; //输出:5
}
}
void main()
{
//adjacent_find();
//binary_search();
//count();
//count_if();
//find();
find_if();
}