transform 将一个容器中的值搬运到另一个容器中
find_if 算法 条件查找
adjacent_find 算法 查找相邻重复元素
count_if 算法 统计元素出现次数
#include <iostream>
#include<algorithm>
using namespace std;
class person{
public:
string name;
int age;
person(){
this->name="";
this->age=0;
}
person(string name ,int age ){
this->name=name;
this->age=age;
}
bool operator==(const person &p1){
if(this->name==p1.name && this->age==p1.age){
return true;
}
else{
return false;
}
}
};
#include <vector>
person mytransint(person val){
return val;
}
class f_transint{
public:
person operator()(person val){
return val;
}
};
void test01(){
vector<person> vec_person;
vec_person.push_back(person("a",1));
vec_person.push_back(person("b",3));
vec_person.push_back(person("c",6));
vec_person.push_back(person("c",6));
vec_person.push_back(person("e",5));
for_each(vec_person.begin(),vec_person.end(),[](person val){cout<<"name: "<<val.name<<" age: "<<val.age<<endl;});
vector<person> vec_person_2;
//分配空间需要默认构造函数
vec_person_2.resize(vec_person.size());
//一般函数
cout<<"---------一般函数----------"<<endl;
transform(vec_person.begin(),vec_person.end(),vec_person_2.begin(),mytransint);
for_each(vec_person_2.begin(),vec_person_2.end(),[](person val){cout<<"name: "<<val.name<<" age: "<<val.age<<endl;});
//仿函数
cout<<"---------仿函数----------"<<endl;
vector<person> vec_f_person;
vec_f_person.resize(vec_person.size());
transform(vec_person.begin(),vec_person.end(),vec_f_person.begin(),f_transint());
for_each(vec_f_person.begin(),vec_f_person.end(),[](person val){cout<<"name: "<<val.name<<" age: "<<val.age<<endl;});
vector<person>::iterator ite= find(vec_f_person.begin(),vec_f_person.end(),person("c",6));
if(ite != vec_f_person.end()){
cout<<"找到"<<ite->name<<ite->age<<endl;
}
else{
cout<<"未找到"<<endl;
}
cout<<"---------adjacent_find---------"<<endl;
vector<person>::iterator ite_ad=adjacent_find(vec_f_person.begin(),vec_f_person.end());
if(ite_ad != vec_f_person.end()){
cout<<"找到"<<ite_ad->name<<ite->age<<endl;
}
else{
cout<<"未找到"<<endl;
}
}
bool gre_20(int val){
if(val>20)
{
return true;
}
else
{
return false;
}
}
class gre_30{
public:
bool operator()(int val){
if(val>30){
return true;
}
else{
return false;
}
}
};
void test02(){
vector<int > vec;
vec.push_back(10);
vec.push_back(20);
vec.push_back(20);
vec.push_back(40);
vec.push_back(50);
vector<int>::iterator iot=find(vec.begin(),vec.end(),30);
if(iot==vec.end()){
cout<<"未查找到"<<endl;
}else{
cout<<"找到 "<<*iot<<endl;
}
cout<<"-----------find_if------------"<<endl;
vector<int>::iterator ite=find_if(vec.begin(),vec.end(),gre_20);
if(ite != vec.end()){
cout<<"找到"<<*ite<<endl;
}else{
cout<<"未找到"<<endl;
}
cout<<"-----------find_if 仿函数------------"<<endl;
vector<int>::iterator ite_f=find_if(vec.begin(),vec.end(),gre_30());
if(ite_f != vec.end()){
cout<<"找到"<<*ite_f<<endl;
}else{
cout<<"未找到"<<endl;
}
cout<<"-----------count-----------"<<endl;
//内建函数
cout<<count_if(vec.begin(),vec.end(),bind2nd(greater<int>(),10))<<endl;
}
int main()
{
cout<<"***********test01***********"<<endl;
test01();
cout<<"***********test02***********"<<endl;
test02();
return 0;
}