merge 容器合并算法
random_shuffle 随机洗牌算法
reverse 反转算法
copy 复制算法
replace 替换算法
replace_if 条件替换算法
#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
#include <time.h>
#include <iterator>
using namespace std;
class person{
public:
string name ;
int age;
public:
person(){
this->name="";
this->age=0;
}
person(string name,int age ){
this->name =name ;
this->age = age;
}
person(const person &p){
this->name=p.name;
this->age=p.age;
}
bool operator <(const person & p){
if(this->age<p.age){
return true;
}
else{
return false;
}
}
friend ostream &operator<<(ostream &out,const person &p) ;
bool operator==(const person &p){
if(p.name==this->name && p.age==this->age){
return true;
}else{
return false;
}
}
};
ostream &operator<<(ostream &out,const person &p){
out<<"p.name: "<<p.name<<" p.age: "<<p.age<<endl;
return out;
}
class great_9{
public:
bool operator()(person &p){
if(p.age>9){
return true;
}
else{
return false;
}
}
};
void test01(){
//容器合并算法 merge
//两个容器必须有序
vector<person> vec;
vec.push_back(person("a",1));
vec.push_back(person("b",3));
vec.push_back(person("c",2));
vec.push_back(person("d",4));
vector<person> vec2;
vec2.push_back(person("A",7));
vec2.push_back(person("B",5));
vec2.push_back(person("C",9));
vec2.push_back(person("D",10));
vector<person> vec3;
vec3.resize(vec.size()+vec2.size());
merge(vec.begin(),vec.end(),vec2.begin(),vec2.end(),vec3.begin());
for_each(vec3.begin(),vec3.end(),[](person & p){
cout<<"p.name: "<<p.name<<" p.age: "<<p.age<<endl;
});
//随机调整 (洗牌) random_shuffle
srand(time(NULL)); //设置随机数种子
random_shuffle(vec.begin(),vec.end());
cout<<"-------使用random_shuffle 洗牌之后-------"<<endl;
for_each(vec.begin(),vec.end(),[](person &p){
cout<<"p.name: "<<p.name<<" p.age: "<<p.age<<endl;
});
//反转算法 reverse
cout<<"-------使用reverse 反转之后-------"<<endl;
reverse(vec.begin(),vec.end());
for_each(vec.begin(),vec.end(),[](person &p){
cout<<"p.name: "<<p.name<<" p.age: "<<p.age<<endl;
});
//拷贝算法 copy
vector<person> vec4;
vec4.resize(vec.size());
copy(vec.begin(),vec.end(),vec4.begin());
cout<<"-------使用copy 拷贝之后-------"<<endl;
for_each(vec4.begin(),vec4.end(),[](person &p){
cout<<"p.name: "<<p.name<<" p.age: "<<p.age<<endl;
});
//copy 实现输出
cout<<"-------使用copy 实现输出-------"<<endl;
copy(vec.begin(),vec.end(),ostream_iterator<person>(cout));
//替换算法 replace
replace(vec.begin(),vec.end(),person("a",1),person("A",10));
cout<<"-------使用repalce 替换之后-------"<<endl;
copy(vec.begin(),vec.end(),ostream_iterator<person>(cout));
//replace_if 条件替换算法
replace_if(vec.begin(),vec.end(),great_9(),person("A",20));
cout<<"-------使用repalce_if 条件替换之后-------"<<endl;
copy(vec.begin(),vec.end(),ostream_iterator<person>(cout));
}
int main()
{
test01();
return 0;
}