zoukankan      html  css  js  c++  java
  • 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;
    }

    结果:

  • 相关阅读:
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale
    CodeForces 785B Anton and Classes
    CodeForces 785A Anton and Polyhedrons
    爱奇艺全国高校算法大赛初赛C
    爱奇艺全国高校算法大赛初赛B
    爱奇艺全国高校算法大赛初赛A
    EOJ 3265 七巧板
    EOJ 3256 拼音魔法
    EOJ 3262 黑心啤酒厂
  • 原文地址:https://www.cnblogs.com/yifengs/p/15196302.html
Copyright © 2011-2022 走看看