zoukankan      html  css  js  c++  java
  • lambda表达式和for_each,find_if

    lambda表达式可以允许我传递任意可调用对象,必须要有捕获列表和函数体,标准形式是[捕获列表] (参数列表)->return tpye{函数体}

    谓词:一元谓词指的是只能接受一个传入参数,二元谓词指的是接受两个参数。

    如果没有写返回类型[](){};这样有两种情况:1、函数体类只能有一个return语句,2、如果有多余两条语句,返回的就是void

    有多条语句还想返回其他类型,必须用标准形式eg;[] (int i)->int{if (i>0) return i;else return -i;}

    for_each()里面的第三个参数是一个函数,可以是lambda表达式。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    int main() {
    	vector<int> vec(10,1);
    	transform(vec.begin(), vec.end(), vec.begin(), [](int i) { return ++i; });
    	for_each(vec.begin(), vec.end(), [](int i) {cout << i<<" "; });
    	cout << endl;
    }
    

      

    	for each(int i in vec)//和上面一样的结果
    		cout << i << " ";
    	cout << endl;
    

    2 find_if()可以接受一个谓词,lambda表达式,count_if也是,这是和find()以及count()的区别;

    void count_ifTest() {
    	vector<string> vec{"we","happy","lovely"};
    	size_t countNum = count_if(vec.begin(), vec.end(), [](const string &s) {return s.size() > 4; });
    //统计vec中有多少个字符串大小大于4的 cout << countNum << endl; }

      

    3STL算法学习-- for_each( ) 与 transform()

    for_each()  对某区间无素执行某种操作.


    void print( int &elem)

    {

       cout<<elem<<endl;

    }

    for_each(coll.begin(), coll.end(), print) ;

     回为元素以引用方式传递,可以改变区间内的元素,.for_each()还可以返回传递进去的函数对像的副本。

    transform() 对某区间无素执行某种操作.操作返回被改动后的元素 可以将操作的结果放到指定的区间


    void fun( int elem)

    {

      retun elem*elem;

    }


    transform(coll.begin(), coll.end(), coll.begin(), fun);

  • 相关阅读:
    nodepad++的python环境变量设置
    notepad++怎么显示项目的目录树?
    转:Mysql explain
    转:Java NIO(3)
    转:Java NIO(2)
    转:Java NIO
    java 符号引用与直接引用
    Redis 基础命令
    适配器模式 & 装饰器模式
    classpath: spring 中的查找方式
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/6764839.html
Copyright © 2011-2022 走看看