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);
}
 
posted @ 2021-02-28 13:32  maycpou  阅读(83)  评论(0编辑  收藏  举报