zoukankan      html  css  js  c++  java
  • algorithm 学习之 for_each

    对于algorithm里面的函数使用不算多,但是用过之后才发现,之前写过很多多余的代码,所以打算系统的学习使用下algorithm里的东西,首先就是for_each。

      先看下for_each的定义:

    template <class _InputIterator, class _Function>
    inline _LIBCPP_INLINE_VISIBILITY
    _Function
    for_each(_InputIterator __first, _InputIterator __last, _Function __f)
    {
        for (; __first != __last; ++__first)
            __f(*__first);
        return _VSTD::move(__f);  // explicitly moved for (emulated) C++03
    }

    这是在XCODE里面的algorithm头文件定义,在windows下面的定义有两个,_for_each和for_each,后者在实现中有调用前者,所以我们使用的时候用for_each就好。

      在这个函数中,需要注意的市function函数只能使用global function和function object,也就是说如果使用类成员函数是不行的,当然静态类成员函数是可以的。在使用类静态成员的时候,在函数名之前必须加上引用。比如在类test中定义了一个函数static void printnum(int &num),作用是将num打印出来,那么使用到for_each中:

        vector<int> numbers(10);    //定义一个容量为10vector用来存储一些整数
        generate(numbers.begin(), numbers.end(), []{
            return rand()%100;
        }); //使用generate函数给vector赋值
        
        for_each(numbers.begin(), numbers.end(), &test::printnum);//将类test的静态成
       //员函数作为for_each的传入参数时需要加上引用

      当然如果是全局函数则不需要了,直接写上去就行了。此外这个方法对象在支持c++11的编译器中,可以使用lambda函数,这样子就方便了很多,比如同样是打印vector里面的数据,可以这样写:

     for_each(numbers.begin(), numbers.end(), [](int &var){
           cout<<var<<" ";
        });

      具体的关于for_each的传入参数function object可以参考下CSDN的这篇文章,写的很好:

     http://blog.csdn.net/yingevil/article/details/6745793

  • 相关阅读:
    python3.x:No matching distribution found for PIL
    类似No module named 'bs4'等错误的解决方法
    微信小程序(一)
    Eclipse (eclipse-jee-luna-SR2-win32)4.4.2 , jdk1.7, pydev 4.5.5版本的 完成的python环境集成
    C#学习笔记(12)——三种方法操作XML
    WPF学习笔记(3)——style
    ASP.NET学习笔记(2)——用户增删改查
    jquery加载页面的方法(页面加载完成就执行)
    ASP.NET学习笔记(1)——VS自动引入命名空间快捷键
    临时2017-6-19 00:02:03
  • 原文地址:https://www.cnblogs.com/leisc/p/4204946.html
Copyright © 2011-2022 走看看