美文网首页
C++:(1)if语句用小括号(2)Lambda 函数(3)C+

C++:(1)if语句用小括号(2)Lambda 函数(3)C+

作者: 电击小子_ea1b | 来源:发表于2018-12-20 20:25 被阅读0次

    1.C++里面的if语句要有小括号括起来,比如:

    if (a>b){cout<<a;}

    2.Lambda 函数与表达式

    C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。 

    Lambda函数的语法定义如下:

    [capture](parameters) mutable ->return-type{statement}

    其中:

    [capture]:捕捉列表。捕捉列表总是出现在 lambda 表达式的开始处。事实上,[] 是 lambda 引出符。编译器根据该引出符判断接下来的代码是否是 lambda 函数。捕捉列表能够捕捉上下文中的变量供 lambda 函数使用。

    (parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号 () 一起省略。

    mutable:mutable 修饰符。默认情况下,lambda 函数总是一个 const 函数,mutable 可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。

    ->return_type:返回类型。用追踪返回类型形式声明函数的返回类型。出于方便,不需要返回值的时候也可以连同符号 -> 一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。

    {statement}:函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。

    例如:

    [](int x, int y){ return x < y ; }

    如果没有返回值可以表示为:

    [capture](parameters){body}

    例如:

    []{ ++global_x; }

    在一个更为复杂的例子中,返回类型可以被明确的指定如下:

    [](int x, int y) -> int { int z = x + y; return z + x; }

    本例中,一个临时的参数 z 被创建用来存储中间结果。如同一般的函数,z 的值不会保留到下一次该不具名函数再次被调用时。

    如果 lambda 函数没有传回值(例如 void),其返回类型可被完全忽略。

    在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:

    []      // 沒有定义任何变量。使用未定义变量会引发错误。

    [x, &y] // x以传值方式传入(默认),y以引用方式传入。

    [&]    // 任何被使用到的外部变量都隐式地以引用方式加以引用。

    [=]    // 任何被使用到的外部变量都隐式地以传值方式加以引用。

    [&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。

    [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

    另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:

    [this]() { this->someFunc(); }(); 

    举一个实际的例子:

    int x=10;

    auto add_x = [x](int a) mutable { x *= 2; return a + x; };  // 复制捕捉x

    cout << add_x(10) << endl; // 输出 30

    但是!!!我的这个一直没有运行成功,提示add_x没有定义,我明明定义了呀??

    3.C++ 数学运算

    在 C++ 中,除了可以创建各种函数,还包含了各种有用的函数供您使用。这些函数写在标准 C 和 C++ 库中,叫做内置函数。您可以在程序中引用这些函数。

    C++ 内置了丰富的数学函数,可对各种数字进行运算。下表列出了 C++ 中一些有用的内置的数学函数。

    为了利用这些函数,您需要引用数学头文件<cmath>

    序号函数 & 描述

    1double cos(double);

    该函数返回弧度角(double 型)的余弦。

    2double sin(double);

    该函数返回弧度角(double 型)的正弦。

    3double tan(double);

    该函数返回弧度角(double 型)的正切。

    4double log(double);

    该函数返回参数的自然对数。

    5double pow(double, double);

    假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。

    6double hypot(double, double);

    该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。

    7double sqrt(double);

    该函数返回参数的平方根。

    8int abs(int);

    该函数返回整数的绝对值。

    9double fabs(double);

    该函数返回任意一个十进制数的绝对值。

    10double floor(double);

    该函数返回一个小于或等于传入参数的最大整数。

    4.C++ 随机数

    在许多情况下,需要生成随机数。关于随机数生成器,有两个相关的函数。一个是rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用srand()函数。srand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed),通常使用srand((unsigned)time(NULL))。

    #include <ctime>//因为用了time()函数

    #include <cstdlib>

    // 设置种子

     srand( (unsigned)time( NULL ) );

      /* 生成 10 个随机数 */ 

     for( i = 0; i < 10; i++ )  {      // 生成实际的随机数      

            j= rand();

            cout <<"随机数: " << j << endl;

      }

    注意:1、rand 随机数产生的范围:在标准的 C 库中函数 rand() 可以生成 0~RAND_MAX 之间的一个随机数,其中 RAND_MAX 是 stdlib.h 中定义的一个整数,它与系统有关,至少为 32767。

    number[i] = rand() % 100; /*产生100以内的随机整数*/

    2、使用 rand() 和 srand() 产生指定范围内的随机整数的方法:“模除+加法”的方法。如要产生 [m,n] 范围内的随机数 num,可用:int num=rand()%(n-m+1)+m;(即rand()%[区间内数的个数]+[区间起点值]

    相关文章

      网友评论

          本文标题:C++:(1)if语句用小括号(2)Lambda 函数(3)C+

          本文链接:https://www.haomeiwen.com/subject/ntmukqtx.html