#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <set>
#include <list>
#include <algorithm>
#include <functional>
#include <string>
#include <iterator> //輸出流
using namespace std;
//謂詞1
bool FindEquelNum1(int &num1, int &num2)
{
return (num1 == num2)?true:false;
}
//謂詞2
struct FindEquelNum2
{
public:
FindEquelNum2(int n)
{
m_num = n;
}
bool operator()(int &num1, int &num2)
{
if ((num1 == num2) && (num1 == m_num))
return true;
else
return false;
}
private:
int m_num;
};
void main071_adjacent_find()
{
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);
//1. adjacent_find: find first matching successor
//vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end());//默認找第一個 ok
//vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end(),FindEquelNum1);////謂詞1 ok
//2. find first satisfying _Pred with successor
vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end(), FindEquelNum2(5));//找到滿足條件的第一個//謂詞2 ok
if (it == vecInt.end())
{
cout<<"not find"<<endl;
}
else
{
cout<<"找到的值爲:"<<*it<<endl;
int dis = distance(vecInt.begin(), it);
cout<<"distance:"<<dis<<endl;
}
}
//二分法
void main072_binary_search()
{
set<int> setInt;
setInt.insert(3);
setInt.insert(1);
setInt.insert(7);
setInt.insert(5);
setInt.insert(9);
/*
bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
{
// test if _Val equivalent to some element, using operator<
_First = _STD lower_bound(_First, _Last, _Val);
return (_First != _Last && !(_Val < *_First));
}
*/
bool bFind = binary_search(setInt.begin(),setInt.end(),5);
if (bFind)
{
cout<<"binary_search succ"<<endl;
}
else
{
cout<<"binary_search fail"<<endl;
}
}
//利用等於操作符,把標誌範圍內的元素與輸入值比較,返回相等的個數
void main073_count()
{
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);
/*
count(_InIt _First, _InIt _Last, const _Ty& _Val)
{
// count elements that match _Val
_DEBUG_RANGE(_First, _Last);
return (_Count_np(_Unchecked(_First), _Unchecked(_Last), _Val));
}
typename iterator_traits<_InIt>::difference_type
_Count_np(_InIt _First, _InIt _Last, const _Ty& _Val)
{
// count elements that match _Val
typename iterator_traits<_InIt>::difference_type _Count = 0;
for (; _First != _Last; ++_First)
if (*_First == _Val)
++_Count;
return (_Count);
}
*/
int num = count(vecInt.begin(), vecInt.end(), 5);
cout<<"num:"<<num<<endl;
}
bool GreatNum(int &num)
{
return (num > 3);
}
void main074_count_if()
{
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);
/*
typename iterator_traits<_InIt>::difference_type
count_if(_InIt _First, _InIt _Last, _Pr _Pred)
{
// count elements satisfying _Pred
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Pred);
return (_Count_if(_Unchecked(_First), _Unchecked(_Last), _Pred));
}
*/
int num = count_if(vecInt.begin(), vecInt.end(), GreatNum);
cout<<"num:"<<num<<endl;
}
void main075_find()
{
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);
/*
_InIt find(_InIt _First, _InIt _Last, const _Ty& _Val)
{
// find first matching _Val
_DEBUG_RANGE(_First, _Last);
return (_Rechecked(_First, _Find(_Unchecked(_First), _Unchecked(_Last), _Val)));
}
*/
vector<int>::iterator it = find(vecInt.begin(), vecInt.end(), 5);
cout<<*it<<endl;
int dis = distance(vecInt.begin(), it);
cout<<"dis:"<<dis<<endl;
}
void main076_find_if()
{
vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);
/*
_InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)
{
// find first satisfying _Pred
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Pred);
return (_Rechecked(_First, _Find_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));
}
*/
vector<int>::iterator it = find_if(vecInt.begin(), vecInt.end(), GreatNum);
cout<<*it<<endl;
int dis = distance(vecInt.begin(), it);
cout<<"dis:"<<dis<<endl;
cout<<"******找出大於3的元素及個數********"<<endl;
vector<int>::iterator it2 = vecInt.begin();
int total_cnt = 0;
int dis2 = 0;
for (;it2 != vecInt.end(); it2++)
{
it2 = find_if(it2, vecInt.end(), GreatNum);
dis = distance(vecInt.begin(), it2);
cout<<"location:"<<dis<<" elem:"<<*it2<<endl;
total_cnt++;
}
cout<<"total_cnt:"<<total_cnt<<endl;
}
int main()
{
//main071_adjacent_find();
//main072_binary_search();
//main073_count();
//main074_count_if();
//main075_find();
main076_find_if();
cout<<"\nhello"<<endl;
system("pause");
return 0;
}
常用STL算法2_查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.