`
lunan
  • 浏览: 78461 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lambda 表达式中的控制结构

阅读更多
/*

Lambda 表达式中的控制结构

参考网址:
//http://club.topsage.com/thread-2276569-1-1.html

*/

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"

#include "boost/lambda/if.hpp"      //if
#include "boost/lambda/switch.hpp"  //switch
#include "boost/lambda/loops.hpp"   //while,do,for



int main() {
using namespace boost::lambda;
using namespace std;

std::vector<std::string> vec;

vec.push_back("1");
vec.push_back("22");
vec.push_back("333");
vec.push_back("4444");

//if_then ----------------------------------------------
//首先,条件是一个谓词,它必须是一个 lambda 表达式,其次,then-语句必须也是一个 lambda 表达式,第三,else-语句必须也是一个 lambda 表达式
//用 constant 来把字符串变成一个 lambda 表达式。
//6u, 这是为了确保执行的是两个无符号类型的比较。
//两种结构,后一种可以多个“,”多条语句
std::for_each(vec.begin(),vec.end(),
          if_then( bind(&std::string::size,_1)<=3u,
          cout << constant("less than 3 \n")));
   
std::for_each(vec.begin(),vec.end(),
          if_(bind(&std::string::size,_1)<=3u)
           [ _1 += "MM",cout << _1 << '\n' ]  );


//if_then_else -----------------------------------------
std::for_each(vec.begin(),vec.end(),
if_then_else( bind(&std::string::size,_1)<=3u,
  std::cout << _1 << '\n',
  std::cout << constant("Skip.\n")));

std::for_each(vec.begin(),vec.end(),
if_(_1=="4444")
                   [_1 += "DD",cout << _1 << '\n']
            .else_[cout << _1 << '\n' ] );


    //if_then_else_return -----------------------------------
    //只有这一种方式
std::transform(vec.begin(),vec.end(),vec.begin(),
           if_then_else_return(bind(&std::string::size,_1)<=3u,
   _1 + "m",
   _1 + "g"
   ) );

 
//switch_ ------------------------------------------------
//<0>它们必须是整型的常量表达式,最多九个,且隐式地增加了一个break-语句
//每个case 只能执行一条语句
std::for_each(vec.begin(),vec.end(),
switch_statement
(
  bind(&std::string::size,_1),
  case_statement<3> (var(cout) << "3位数:"<< _1 <<  '\n' ),
  case_statement<2> (    cout  << constant("2位数") << '\n' ),
  default_statement (    cout  << "多位数"+ _1      << '\n' )
)
);



//while_loop ---------------------------------
    int val1=1;
int val2=4;
(while_loop(_1<_2,
   (++_1,_1*2/2,std::cout << constant( "Inc...\n")))
)(val1,val2);

val1=1;
val2=4;
    (while_(_1<_2)
       [++_1,std::cout << constant("Inc...\n")]
)(val1,val2);

    //do_while_loop -------------------------------
//make_const,它只是返回一个对它的参数的 const 引用。另一个方法是把整个 lambda 表达式用于调用 const_parameters
(do_while_loop(
          _1!=12,
          cout << constant("I'll run once"))
)(make_const(12));

(do_[ cout << constant("I'll run once")]
.while_(_1!=12)
)(make_const(12));


    //for_loop ---------------------------------
//命名的延期变量用于避免重复为常量和变量敲入 constant 或 var 。它们对你要用的东西进行命名并稍后可被引用。
int val3=0;
var_type<int>::type counter(var(val3));
(for_loop(counter=0,counter<_1,++counter,
   var(std::cout) << "counter is " << counter << "\n")
)(make_const(4));

(for_(counter=0,counter<_1,++counter)
[counter+1,var(cout) << "counter is " << counter << "\n"]
)(make_const(4));
}
分享到:
评论

相关推荐

    C# Lambda表达式

    Lambda表达式的语法结构如下: ```csharp 参数列表 =&gt; 表达式 或 方法体 ``` 这里的参数列表可以是空的,也可以包含一个或多个参数,用逗号分隔。箭头`=&gt;`表示“根据以下规则进行计算”。表达式部分是一个简单的计算...

    Lambda表达式.docx

    - Lambda表达式不能包含控制流语句(如`if`、`for`),但可以在函数体中使用三元运算符。 - Lambda表达式与方法引用是相关的,可以互换使用,具体取决于上下文。 总结来说,Lambda表达式是Java 8的一个重要创新,...

    18.【线程池、Lambda表达式】_java线程_lambda线程池_meantbs3_

    Lambda表达式的语法结构是`(parameters) -&gt; expression`,其中参数列表在括号内,箭头后是函数体。Lambda表达式常用于Java的函数式接口,例如`Runnable`,它可以表示一个没有返回值的无参函数。在多线程场景中,我们...

    C++ Lambda Story

    此外,还引入了协程(coroutines),这与Lambda表达式相结合,可以方便地实现异步编程和复杂控制流。 Lambda表达式对现代C++的影响深远,它们简化了代码,提高了代码的可读性和可维护性。通过这本书,读者将了解到...

    毕业设计:在线汽车站车票售卖系统,EF框架+T4模板+Lambda表达式+三层设计+MVC.zip

    在本项目中,Lambda表达式可能被广泛应用于查询操作,比如在EF的LINQ查询中,它可以使得数据操作更加直观和简洁。 三层架构是一种常见的软件设计模式,包括表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。...

    Apress - Java Closures and Lambda.2015

    - **映射处理**:探讨了Lambda表达式在处理映射数据结构时的灵活性。 - **流式API**:重点讲解了Java 8中的Stream API,以及如何使用Lambda表达式进行流式处理,从而更高效地处理大量数据。 **第4章:使用Lambda...

    老男孩 Python 自动化开发 03 Python模块化编程 函数式编程 yield 三元编程 lambda表达式 装饰器 共

    在"老男孩 Python 自动化开发 03"这一主题中,我们重点关注了几个核心概念:Python模块化编程、函数式编程、yield、三元编程、lambda表达式以及装饰器。 **Python模块化编程**是将代码组织成可重用的模块,以提高...

    Python lambda表达式原理及用法解析

    Python中的lambda表达式是一种简洁的创建小型匿名函数的方式。它主要特点是无需定义名称,可以直接用一个表达式来创建函数,通常用于实现简单的逻辑。lambda函数的使用有助于减少代码量,提高代码的简洁性,尤其在...

    MVVM ICommand,CanExecuteChanged的Lambda表达式

    表达式树能将Lambda表达式转换为一种可查询的数据结构,这使得我们可以分析和操作这些表达式,例如在`CanExecuteChanged`事件中动态评估`CanExecute`的条件。 结合提供的文件名`MVVM-ICommand-Lambda-Expression-...

    浅析python的Lambda表达式

    ### 浅析Python的Lambda表达式 在Python编程语言中,`lambda`表达式是一种非常实用的功能,它允许开发者快速创建简洁的匿名函数。本文旨在详细介绍`lambda`表达式的概念、用途及其在实际编程中的应用。 #### 1. ...

    Day 22多线程、线程通信、线程池和Lambda表达式

    线程通信和线程池则是多线程编程中控制并发执行和优化资源分配的关键概念,而Lambda表达式则是一种简化函数式编程的语法结构。 1. **多线程** 多线程是程序设计中并行处理的一种方式。在Java中,可以通过继承`...

    Java函数式编程(一):你好,Lambda表达式

    在Java 8及更高版本中,Lambda表达式是函数式编程的核心特性之一,它允许我们将函数作为一等公民,即函数可以被赋值给变量、作为参数传递或作为返回值。 在传统的命令式编程中,我们通常通过循环结构来处理集合,如...

    jdk8函数式编程学习和复习必备

    - 在实际开发中,我们可以利用Lambda表达式和Stream API来处理复杂的业务逻辑,例如,上述示例中查询未成年作者评分在70分以上的书籍,通过Stream API的链式操作,使得代码更加优雅,同时避免了传统循环中的“嵌套...

    Lambda Calculi with Types

    #### 二、Lambda表达式的结构 Lambda表达式通常由变量、抽象和应用三部分组成: - **变量**:标识符或名称。 - **抽象**:用λ符号表示一个函数定义,形如λx.M,其中x是变量,M是表达式。 - **应用**:将一个...

    python lambda表达式(匿名函数)写法解析

    Python的`lambda`表达式是一种简洁的...然而,由于`lambda`函数仅限于一行表达式且不支持复杂的控制流,因此不适合编写大型或复杂的逻辑。在编写代码时,应当根据实际需求平衡简洁性和可读性,适当使用`lambda`函数。

    类C#脚本解析

    这种方式比传统的字符串拼接或解释执行的方式更高效,因为lambda表达式在编译时就能确定其结构,从而优化了性能。 在C#中,脚本解析通常用于实现动态编程、热更新或脚本引擎。例如,游戏开发中可能需要运行用户编写...

    Java 8特性全面解析

    Lambda表达式能够提升代码的抽象层次,提高API的复用性,并简化代码结构,使之更加清晰易读。 Java 8在集合框架上也做出了改进,引入了流(Stream)的概念。流提供了一种高级的迭代方式,使得集合处理变得更加方便...

    MVC lambda+EF的简单的增删查改实例【注释得很清楚】

    在这个实例中,我们将深入探讨如何使用C#语言和Lambda表达式与Entity Framework(简称EF)在MVC中实现数据的增删查改功能。** **首先,Entity Framework是一个对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    Python Lambda函数使用总结详解

    首先,需要了解Lambda表达式与Python中常用的def关键字定义的函数之间的对应关系。使用def关键字可以定义具有名称的函数,而Lambda表达式则用于创建匿名函数。它们之间的等价关系可以表示为: ```python # 使用 def...

Global site tag (gtag.js) - Google Analytics