包含头文件:algorithm
整合
//for_each(begin, end, function)
//普通函数作为for_each()的第三个参数(传参的时候只传函数名)
void print01(int v) {
cout << v << " ";
}
//仿函数作为for_each()的第三个参数(传参的时候传函数对象(匿名对象))
class print02 {
public:
void operator() (int v) {
cout << v << " ";
}
};
void for_each_test() {
//遍历
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
//for_each(beg, end, fun):前两个参数为容器的起始和结束迭代器(区间),
//后一个参数为函数或者仿函数
for_each(v.begin(), v.end(), print01);
for_each(v.begin(), v.end(), print02());
}
//transform(begin_01, end_01, begin_02, function)
//transform:搬运:将一个容器中的内容搬运到另一个容器中
class Transform {
public:
int operator() (int n) {
return n;
}
};
void transform_test() {
vector<int> v1; //源容器
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
vector<int> v2; //目标容器
//使用transform需要提前给目标容器开辟空间,否则会失败
v2.resize(v1.size());
//最后一个参数为仿函数,
//可以在定义仿函数的时候让数值发生变化(return n+10)
transform(v1.begin(), v1.end(), v2.begin(), Transform());
}
for_each
//for_each(begin, end, function)
//普通函数作为for_each()的第三个参数(传参的时候只传函数名)
void print01(int v) {
cout << v << " ";
}
//仿函数作为for_each()的第三个参数(传参的时候传函数对象(匿名对象))
class print02 {
public:
void operator() (int v) {
cout << v << " ";
}
};
void for_each_test() {
//遍历
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
//for_each(beg, end, fun):前两个参数为容器的起始和结束迭代器(区间),
//后一个参数为函数或者仿函数
for_each(v.begin(), v.end(), print01);
for_each(v.begin(), v.end(), print02());
}
transform
//transform(begin_01, end_01, begin_02, function)
//transform:搬运:将一个容器中的内容搬运到另一个容器中
class Transform {
public:
int operator() (int n) {
return n;
}
};
void transform_test() {
vector<int> v1; //源容器
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
vector<int> v2; //目标容器
//使用transform需要提前给目标容器开辟空间,否则会失败
v2.resize(v1.size());
//最后一个参数为仿函数,
//可以在定义仿函数的时候让数值发生变化(return n+10)
transform(v1.begin(), v1.end(), v2.begin(), Transform());
}