考虑以下需求:
统计某个容器中符合规定的元素个数,比如这里规定就是小于某个数(如果有其他需求可以自定义一个仿函数)
来我们来写代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
template <typename Ty>
bool my_less(Ty i){
return i < 5;
}
int main(int argc,char** argv){
int a[] = {1,2,3,4,5,6,7,8,9,10};
vector<int> vec(a,a+10);
cout<<count_if(vec.begin(),vec.end(),my_less<int>)<<endl;
}
我们来写代码吧。
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
template <typename Ty>
bool my_less(Ty i){
return i < 5;
}
template <typename Ty>
struct my_less1
{
Ty threshold;
my_less1(Ty i):threshold(i){}
bool operator () (Ty num){
return num <threshold;
}
};
int main(int argc,char** argv){
int a[] = {1,2,3,4,5,6,7,8,9,10};
vector<int> vec(a,a+10);
cout<<count_if(vec.begin(),vec.end(),my_less<int>)<<endl;
int x = 8;
cout<<count_if(vec.begin(),vec.end(),my_less1<int>(x))<<endl;
}
1.排序
举个例子吧:比较成绩(这是一段很久之前写的代码)
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct E{
char name[100];
int age;
int score;
bool operator < (const E &b) const{ //重定义小于运算符号
if(score!=b.score) return b.score<score;
int tmp=strcmp(name,b.name);
if(tmp!=0) return tmp>0;
else return b.age<age;
}
}buf[1000];
int main()
{
cout<<"请输入要比较的学生的人数:"<<endl;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>buf[i].name>>buf[i].age>>buf[i].score;
}
sort(buf,buf+n);
cout<<"学生成绩排名比较为:"<<endl;
for(int i=0;i<n;i++)
{
cout<<buf[i].name<<" "<<buf[i].age<<" "<<buf[i].score<<endl;
}
return 0;
}
#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
template <typename T>
class AddValues{
private:
T val;
public:
AddValues(T j):val(j){}
void operator()(int& i){
cout<<i + val<<endl;
i += val;
}
};
int main(int argc, char** argv){
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
int x =2;
for_each(vec.begin(),vec.end(),AddValues<int>(x));
cout<<endl;
copy(vec.begin(),vec.end(),ostream_iterator<int>(cout, " "));
}
所以特殊需求可以传引用或者指针
这里有常见的仿函数:
https://www.cnblogs.com/cyssmile/p/12790854.html
原文:https://www.cnblogs.com/cyssmile/p/12791302.html