stl(18)内置算法for_each transform
1.for_each用法,头文件#include <algorithm>
该算法用于获取容器种的每一个元素,然后做统一的操作。
#include <iostream>
#include <vector>
#include <algorithm>
void myPrint(int i ){
std::cout<<i<<std::endl;//这里可以做任意的数据处理
}
class MyPrint{
public:
void operator()(int i){
std::cout<<i<<std::endl;//这里可以做任意的数据处理
}
};
int main(){
std::vector<int> vec;
for(int i = 0;i<10;i++){
vec.push_back(i);
}
for_each(vec.begin(),vec.end(),myPrint);//回调函数版本
for_each(vec.begin(),vec.end(),MyPrint());//仿函数版本,MyPrint()相当于传入了一个MyPrint类的匿名对象
}
2.transform用法,头文件#include <algorithm>
用于将一个容器中的数据拷贝到另外一个容器,拷贝过程中可以对原容器的每个数据做一个处理后在拷贝(如都加上1)
#include <iostream>
#include <vector>
#include <algorithm>
class MyTransform{
public:
int operator()(int i){
return i;//这里可以对原数据进行处理,如果直接拷贝则返回原数据即可
}
};
int myTransform(int i){
return i ;//这里可以对原数据进行处理,如果直接拷贝则返回原数据即可
}
void myPrint(int i ){
std::cout<<i<<std::endl;
}
int main(){
std::vector<int> vec;
for(int i = 0;i<10;i++){
vec.push_back(i);
}
std::vector<int> vec1;
vec1.resize(vec.size());//这里要保证vec1种有足够的空间放下拷贝过来的数据
//transform(vec.begin(),vec.end(),vec1.begin(),myTransform);//回调函数版本
transform(vec.begin(),vec.end(),vec1.begin(),MyTransform());//仿函数版本
for_each(vec1.begin(),vec1.end(),myPrint);
}