C++:(1)if语句用小括号(2)Lambda 函数(3)C++ 数学运算()(4)随机数

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

if (a>b){cout<

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++ 中一些有用的内置的数学函数。

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

序号函数 & 描述

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 //因为用了time()函数

#include

// 设置种子

 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++ 数学运算()(4)随机数)