zoukankan      html  css  js  c++  java
  • 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);
    }
     
  • 相关阅读:
    关于网站的性能瓶颈——(阅读笔记)
    Servlet原理解析
    配置Ubuntu Server高速aptget源
    字节对齐
    linux学习笔记—之—linux文件管理
    JavaWeb过滤器Filter
    C语言编程程序的内存布局
    修改Linux下MySQL编码
    C语言中——关于typedef
    linux学习笔记—之—LVM管理
  • 原文地址:https://www.cnblogs.com/maycpou/p/14458794.html
Copyright © 2011-2022 走看看