• STL算法之遍历


    遍历算法

    • for_each  可有有返回值
    • 可以绑定参数进行输出
    • transform  将容器中的数据进行搬运到另一个容器中
    • 注意:transform  目标容器需要开辟空间

    for_each(iterator beg, iterator end, _callback);

    • 遍历算法 遍历容器元素
    • @param beg 开始迭代器
    • @param end 结束迭代器
    • @param _callback  函数回调或者函数对象
    • @return 函数对象
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    #include <vector>
    #include <functional>
    #include <algorithm>
    //1.for_each普通遍历
    struct myPrint01
    {
        void operator()(int v)
        {
            cout << v << endl;
        }
    };
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
        for_each(v.begin(), v.end(), myPrint01());
    }
    //2.for_each可以保存内部记录
    struct myPrint02
    {
        void operator()(int v)
        {
            cout << v << endl;
            m_Count++;
        }
        int m_Count;
    };
    void test02()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
    
        //for_each做遍历的时候会返回函数对象
        myPrint02 print2 =  for_each(v.begin(), v.end(), myPrint02());
        cout << print2.m_Count << endl;
    }
    //3.for_each可以绑定参数进行输出
    struct myPrint03:public binary_function<int,int,void>
    {
        void operator()(int v, int start)const
        {
            cout << v + start << endl;
        }
    };
    void test03()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
    
        
        for_each(v.begin(), v.end(), bind2nd(myPrint03(), 1000));
        
    }

    transform(iterator beg1, iterator end1, iterator beg2, _callbakc)

    • transform算法 将指定容器区间元素搬运到另一容器中
    • 注意 : transform 不会给目标容器分配内存,所以需要我们提前分配好内存
    • @param beg1 源容器开始迭代器
    • @param end1 源容器结束迭代器
    • @param beg2 目标容器开始迭代器
    • @param _cakkback 回调函数或者函数对象
    • @return 返回目标容器迭代器
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    //1.搬运 把一个容器内的数据搬运到另一个容器中
    struct Transform
    {
        int operator()(int v)
        {
            return v + 10;          //搬运过程中给源容器每个数据+10
        }
    };
    void test01()
    {
        vector<int>v;   //源容器
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
        vector<int> vTarget;//目标容器
        vTarget.resize(v.size());       //重要 一定要给目标容器分配内存
    
        transform(v.begin(), v.end(), vTarget.begin(), Transform());        //搬运的同时修改每个成员的值
    
        for_each(vTarget.begin(), vTarget.end(), [](int v) { cout << v << endl; });
    }
    //2.把两个容器内的数据 一起搬运到第三个容器内 可以加逻辑运算
    struct Transform02
    {
        int operator()(int v1, int v2)
        {
            return v1 + v2;
        }
    };
    void test02()
    {
        vector<int>v1;   //源容器
        vector<int>v2;   //源容器
        for (int i = 0; i < 10; i++)
        {
            v1.push_back(i + 100);
            v2.push_back(i + 200);
        }
    
        vector<int> vTar;   //目标容器
        vTar.resize(v1.size());
        transform(v1.begin(), v1.end(), v2.begin(), vTar.begin(), Transform02());
    
        for_each(vTar.begin(), vTar.end(), [](int v) {cout << v << endl; });
    }
    int main()
    {
        test02();
        //test01();
        system("Pause");
        return 0;
    }

    结果:

  • 相关阅读:
    kubernetes排错系列:(一)、机房搬迁导致的节点NotReady
    kubernetes学习:CKA考试认证(二)
    kubernetes学习:CKA考试题
    kubernetes学习:CKA考试认证
    Pycharm中连接数据库乱码问题解决
    Matplotlib——中级
    Numpy
    Matplotlib——初级
    Matplotlib中中文不显示问题
    CentOS系统安装
  • 原文地址:https://www.cnblogs.com/yifengs/p/15196302.html
Copyright © 2020-2023  润新知