C++:(1)if語句用小括號(2)Lambda 函數(shù)(3)C++ 數(shù)學(xué)運算(<cmath>)(4)隨機數(shù)

1.C++里面的if語句要有小括號括起來,比如:

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

2.Lambda 函數(shù)與表達式

C++11 提供了對匿名函數(shù)的支持,稱為 Lambda 函數(shù)(也叫 Lambda 表達式)。?

Lambda函數(shù)的語法定義如下:

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

其中:

[capture]:捕捉列表。捕捉列表總是出現(xiàn)在 lambda 表達式的開始處。事實上,[] 是 lambda 引出符。編譯器根據(jù)該引出符判斷接下來的代碼是否是 lambda 函數(shù)。捕捉列表能夠捕捉上下文中的變量供 lambda 函數(shù)使用。

(parameters):參數(shù)列表。與普通函數(shù)的參數(shù)列表一致。如果不需要參數(shù)傳遞,則可以連同括號 () 一起省略。

mutable:mutable 修飾符。默認(rèn)情況下,lambda 函數(shù)總是一個 const 函數(shù),mutable 可以取消其常量性。在使用該修飾符時,參數(shù)列表不可省略(即使參數(shù)為空)。

->return_type:返回類型。用追蹤返回類型形式聲明函數(shù)的返回類型。出于方便,不需要返回值的時候也可以連同符號 -> 一起省略。此外,在返回類型明確的情況下,也可以省略該部分,讓編譯器對返回類型進行推導(dǎo)。

{statement}:函數(shù)體。內(nèi)容與普通函數(shù)一樣,不過除了可以使用參數(shù)之外,還可以使用所有捕獲的變量。

例如:

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

如果沒有返回值可以表示為:

[capture](parameters){body}

例如:

[]{ ++global_x; }

在一個更為復(fù)雜的例子中,返回類型可以被明確的指定如下:

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

本例中,一個臨時的參數(shù) z 被創(chuàng)建用來存儲中間結(jié)果。如同一般的函數(shù),z 的值不會保留到下一次該不具名函數(shù)再次被調(diào)用時。

如果 lambda 函數(shù)沒有傳回值(例如 void),其返回類型可被完全忽略。

在Lambda表達式內(nèi)可以訪問當(dāng)前作用域的變量,這是Lambda表達式的閉包(Closure)行為。 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區(qū)別??梢酝ㄟ^前面的[]來指定:

[]? ? ? // 沒有定義任何變量。使用未定義變量會引發(fā)錯誤。

[x, &y] // x以傳值方式傳入(默認(rèn)),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; };? // 復(fù)制捕捉x

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

但是!?。∥业倪@個一直沒有運行成功,提示add_x沒有定義,我明明定義了呀??

3.C++ 數(shù)學(xué)運算

在 C++ 中,除了可以創(chuàng)建各種函數(shù),還包含了各種有用的函數(shù)供您使用。這些函數(shù)寫在標(biāo)準(zhǔn) C 和 C++ 庫中,叫做內(nèi)置函數(shù)。您可以在程序中引用這些函數(shù)。

C++ 內(nèi)置了豐富的數(shù)學(xué)函數(shù),可對各種數(shù)字進行運算。下表列出了 C++ 中一些有用的內(nèi)置的數(shù)學(xué)函數(shù)。

為了利用這些函數(shù),您需要引用數(shù)學(xué)頭文件<cmath>。

序號函數(shù) & 描述

1double cos(double);

該函數(shù)返回弧度角(double 型)的余弦。

2double sin(double);

該函數(shù)返回弧度角(double 型)的正弦。

3double tan(double);

該函數(shù)返回弧度角(double 型)的正切。

4double log(double);

該函數(shù)返回參數(shù)的自然對數(shù)。

5double pow(double, double);

假設(shè)第一個參數(shù)為 x,第二個參數(shù)為 y,則該函數(shù)返回 x 的 y 次方。

6double hypot(double, double);

該函數(shù)返回兩個參數(shù)的平方總和的平方根,也就是說,參數(shù)為一個直角三角形的兩個直角邊,函數(shù)會返回斜邊的長度。

7double sqrt(double);

該函數(shù)返回參數(shù)的平方根。

8int abs(int);

該函數(shù)返回整數(shù)的絕對值。

9double fabs(double);

該函數(shù)返回任意一個十進制數(shù)的絕對值。

10double floor(double);

該函數(shù)返回一個小于或等于傳入?yún)?shù)的最大整數(shù)。

4.C++ 隨機數(shù)

在許多情況下,需要生成隨機數(shù)。關(guān)于隨機數(shù)生成器,有兩個相關(guān)的函數(shù)。一個是rand(),該函數(shù)只返回一個偽隨機數(shù)。生成隨機數(shù)之前必須先調(diào)用srand()函數(shù)。srand函數(shù)是隨機數(shù)發(fā)生器的初始化函數(shù)。原型:void srand(unsigned seed),通常使用srand((unsigned)time(NULL))。

#include <ctime>//因為用了time()函數(shù)

#include <cstdlib>

// 設(shè)置種子

?srand( (unsigned)time( NULL ) );

? /* 生成 10 個隨機數(shù) */?

?for( i = 0; i < 10; i++ )? {? ? ? // 生成實際的隨機數(shù) ? ? ?

????????j= rand();

? ? ? ? cout <<"隨機數(shù): " << j << endl;

? }

注意:1、rand 隨機數(shù)產(chǎn)生的范圍:在標(biāo)準(zhǔn)的 C 庫中函數(shù) rand() 可以生成 0~RAND_MAX 之間的一個隨機數(shù),其中 RAND_MAX 是 stdlib.h 中定義的一個整數(shù),它與系統(tǒng)有關(guān),至少為 32767。

number[i] = rand() % 100; /*產(chǎn)生100以內(nèi)的隨機整數(shù)*/

2、使用 rand() 和 srand() 產(chǎn)生指定范圍內(nèi)的隨機整數(shù)的方法:“模除+加法”的方法。如要產(chǎn)生 [m,n] 范圍內(nèi)的隨機數(shù) num,可用:int num=rand()%(n-m+1)+m;(即rand()%[區(qū)間內(nèi)數(shù)的個數(shù)]+[區(qū)間起點值]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容