`
lunan
  • 浏览: 77119 次
  • 性别: 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));
}
分享到:
评论

相关推荐

    Kotlin的教程.txt

    Lambda表达式与函数式编程:掌握Kotlin中的Lambda表达式和函数式编程概念,如高阶函数和映射操作。 扩展函数与属性:了解如何为已有的类添加新的函数和属性,通过扩展函数和扩展属性。 空安全与

    DOTNET-C#基础快速入门教程-全网最简单

    DOTNET_C#基础快速入门教程,100多页的pdf文档,包括了常用的基础知识点: 数据类型 类型转换 变量、常量、运算符 ...Lambda表达式 闭包(Closure) LINQ技术 多线程 网络编程 窗体设计 Form窗体 MDI窗体 常用控件

    浏览器中的scheme解释器SchemeScript.zip

    支持define,defn, lambda, currying,可以定义变量,函数,lambda表达式,实现了柯里话 有 if 和 cond 控制结构 内置函数有 , -, * , /, define, defn, lambda, if, not , list, cons, car, cdr等,所以合法...

    全国计算机等级考试二级python的学习笔记

    全国计算机等级考试二级Python学习笔记可以从以下几个方面进行总结: 1. Python基础知识 - Python语法基础:变量、数据类型、运算符、流程控制语句等。... - Python函数式编程:Lambda表达式、高阶函数、闭包等概念。

    Java学习用例demo

    3、Java8的新特性包括:Lambda表达式、流式操作、函数式接口、接口默认方法等。 4、Java应用:多线程编程、框架集成(Spring、Mybatis)、数据库操作(JDBC)、IO Stream字节流处理等。 二、java基础知识点对于...

    JAVA源码文本-Java-in-Two-Semesters-Featuring-JavaFX:文本中程序的源代码

    首先介绍基本的编程概念,例如变量的声明,控制结构,方法和数组 类和对象,继承和多态性的基本面向对象概念 整个JavaFX用于构建事件驱动的图形界面 高级主题,例如接口和lambda表达式,泛型,集合类和异常 解释文件...

    AspNet MVC 开发技术

    6.2.1 其他结构中变量的作用域 122 6.2.2 参数和返回值与全局数据 124 6.3 main( )函数 125 6.4 结构函数 128 6.5 函数的重载 128 6.6 委托 130 6.7 小结 133 6.8 练习 133 6.9 本章要点 134 第7章 调试和错误处理 ...

    C# 程序设计手册(WORD)

    在查询中使用 Lambda 表达式 92 在 LINQ 之外使用 Lambda 表达式 94 匿名方法 94 可多载的运算符 97 转换运算符 98 使用转换运算符 99 在结构之间实作用户定义的转换 101 使用运算符多载建立复数类别 103 覆写 ...

    Visual C# 2008大学教程(第3版).pdf

    属性、匿名类型、lambda表达式 面向对象缡程 继承、多态、接口、部分类、 OOP案例研究 GUI、图形和多媒体 WinForms、WPF、XAML、事件处理 WPF图形/多媒体、Silverlight 数据结构 列表、排队、堆栈、树 递归、搜索、...

    Visual C# 2008大学教程(第3版) 第二部分

    属性、匿名类型、lambda表达式 面向对象缡程 继承、多态、接口、部分类、 OOP案例研究 GUI、图形和多媒体 WinForms、WPF、XAML、事件处理 WPF图形/多媒体、Silverlight 数据结构 列表、排队、堆栈、树 递归、搜索、...

    day01.环境变量,HelloWorld,常量

    - **第四部分:Java新特性:**`Lambda表达式`、`函数式编程`、`新Date/Time API`、`接口的默认、静态和私有方法`、 - **第五部分:MySQL/JDBC核心技术:**`SQL语句`、`数据库连接池`、`DBUtils`、`事务管理`、`...

    Ruby编程语言pdf

    在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...

    轻松学C#(图解版)

    第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 =======================================...

    Python-3-Programming-specialization:该存储库包含该专业所有课程的解决方案

    课程1:Python基础本课程介绍Python 3的基础知识,包括条件执行和迭代作为控制结构,以及字符串和列表作为数据结构。课程2:Python函数,文件和字典本课程介绍字典数据结构和用户定义的函数。 您将了解局部和全局...

    Ruby程序设计语言 (涵盖Ruby 1.8和1.9)源代码

    《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次接触Ruby的资深... 语句和控制结构  Method、proc、lambda和closure  类和模块  反射和元编程

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    程序设计方法.[美]Matthias Felleisen(带书签文字版).pdf

    24.2 lambda 表达式的辖域和语义 230 24.3 lambda 表达式的语用 232 第五部分 生成递归 233 第25章 一种新的递归形式 233 25.1 为桌上的一个球建立模型 233 25.2 快速排序 236 第26章 设计算法 239 26.1 终止...

    java8集合源码分析-java8:java8

    lambda表达式 一、lambda概述: lambda表示数学符号"λ",计算机领域中λ代表"λ演算",表达了计算机中最基本的概念: "调用"和"转换"。 二、为什么使用lambda 1.Java是面向对象的语言,不能像函数式语言那样嵌套...

    面向人工智能的Python程序设计课程 Python从基础入门到进阶教程04 控制结构-选择结构、循环结构 共16页.pptx

    04 控制结构-选择结构、循环结构 05 函数、lambda函数 06 模块 07 正则表达式 08 异常处理 09 numpy基础知识-线性代数-数据矩阵 10 padas入门.pptx 共109页.ppt 11 matplotlib-绘制精美的图表 共82页.ppt 12 机器...

    程序设计方法(How_To_Design_Programs)-MIT.pdf

    24.2 lambda表达式的辖域和语义 235 24.3 lambda表达式的语用 237 第五部分 生成递归 第25章 一种新的递归形式 241 25.1 为桌上的一个球建立模型 242 25.2 快速排序 244 第26章 设计算法 248 26.1 终止 249 26.2 ...

Global site tag (gtag.js) - Google Analytics