偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

EasyC++,C++ 中的 For 循環(huán)

開(kāi)發(fā) 后端
在編程當(dāng)中我們經(jīng)常會(huì)遇到需要重復(fù)執(zhí)行的步驟,想要讓計(jì)算機(jī)能夠重復(fù)執(zhí)行某些邏輯,就需要使用循環(huán)。

[[432273]]

大家好,我是梁唐。

這是EasyC++系列的第19篇,簡(jiǎn)單聊聊C++當(dāng)中的for循環(huán)。

想要追求更好閱讀體驗(yàn)的同學(xué),可以點(diǎn)擊文末的「閱讀原文」,訪(fǎng)問(wèn)github倉(cāng)庫(kù)。

for 循環(huán)

在編程當(dāng)中我們經(jīng)常會(huì)遇到需要重復(fù)執(zhí)行的步驟,想要讓計(jì)算機(jī)能夠重復(fù)執(zhí)行某些邏輯,就需要使用循環(huán)。

在C++當(dāng)中,循環(huán)有三種類(lèi)型,分別是for循環(huán)、while循環(huán)和do while循環(huán)。其中前兩者使用較多,最后一個(gè)很少使用。

基礎(chǔ)用法

求1 + 2 + 3 + ... + 100的和,使用for循環(huán)實(shí)現(xiàn):

  1. int ret = 0; 
  2. int i; 
  3. for (i = 1; i <= 100; i++) { 
  4.     ret += i; 

這里的i++表示自增操作,是i+=1的簡(jiǎn)寫(xiě),也可以寫(xiě)成++i。不過(guò)++i和i++并不能完全混用,我們將會(huì)在之后的內(nèi)容當(dāng)中進(jìn)行闡述。

根據(jù)C++ Primer當(dāng)中的定義,for循環(huán)可以分成三個(gè)部分。第一個(gè)部分是初始化,在這個(gè)for循環(huán)當(dāng)中,我們把循環(huán)因子i初始化成了1。第二個(gè)部分是判斷條件,也就是for循環(huán)的執(zhí)行條件,在什么情況下需要執(zhí)行循環(huán)。第三個(gè)部分是更新循環(huán)因子,比如在這個(gè)例子當(dāng)中,我們當(dāng)前的i加入了ret之后,自增1變成了下一個(gè)將要累加的數(shù)。最后一個(gè)部分就是花括號(hào)當(dāng)中的執(zhí)行體,也就是每次循環(huán)需要執(zhí)行的內(nèi)容。

寫(xiě)成通用形式就是:

  1. for (initialization; test-expression; update-expression) { 
  2.     body; 

初始化、判斷條件以及更新因子這三個(gè)部分使用分號(hào)分隔。如果循環(huán)要執(zhí)行的內(nèi)容只包含一條語(yǔ)句,花括號(hào)也可以不寫(xiě)。不過(guò)為了保證全局的代碼風(fēng)格統(tǒng)一,最好還是統(tǒng)一使用花括號(hào)。

test-expression決定循環(huán)是否結(jié)束,因此,在每一次body開(kāi)始執(zhí)行之前,都需要進(jìn)行一次test-expression的判斷。當(dāng)test-expression為true時(shí),才會(huì)執(zhí)行body中的語(yǔ)句。

test-expression并不一定需要是一個(gè)bool值,C++會(huì)進(jìn)行強(qiáng)制轉(zhuǎn)換。比如對(duì)于int類(lèi)型,0值會(huì)被轉(zhuǎn)換為false,而其他值都會(huì)轉(zhuǎn)換成true。如:

  1. int ret = 0; 
  2. int i; 
  3. for (i = 100; i; i--) { 
  4.     ret += i; 

這段邏輯和上面一樣,同樣是計(jì)算了1到100累加的值。只不過(guò)這里我們進(jìn)行的是倒序相加,循環(huán)的執(zhí)行條件為i >= 0。當(dāng)i=0時(shí)結(jié)束,我們的判斷條件可以寫(xiě)成i。int型的i會(huì)被強(qiáng)制轉(zhuǎn)換成bool型,當(dāng)i=0時(shí),值為false,循環(huán)結(jié)束。其中自減符的用法和自增類(lèi)似。

進(jìn)階用法

首先,我們可以將循環(huán)因子的聲明寫(xiě)入for循環(huán)當(dāng)中:

  1. // version1 
  2. int i; 
  3. for (i = 0; i < 100; i++) ret += i; 
  4.  
  5. // version2 
  6. for (int i = 0; i < 100; i++) ret += i; 

這樣有兩個(gè)好處,第一是簡(jiǎn)化了代碼,將i的聲明語(yǔ)句寫(xiě)入了for循環(huán)當(dāng)中,可讀性也更好。另一點(diǎn)是限定了i這個(gè)變量的使用范圍,在for循環(huán)當(dāng)中聲明的變量,它的作用域也只有for循環(huán),出了循環(huán)之后,i這個(gè)變量將消失。

不過(guò)在一些老舊的編譯器(如VC6.0)當(dāng)中并不會(huì)這樣,循環(huán)當(dāng)中聲明的變量依然會(huì)繼續(xù)存在。

另外initialization; test-expression; update-expression這三條語(yǔ)句都不是必須的,可以根據(jù)我們的需要進(jìn)行省略。

比如for循環(huán)所需要的初始化工作之前已經(jīng)完成,那么就可以省略initialization:

  1. int i = 0; 
  2. for (; i < 100; i++) ret += i; 

比如我們也可以將循環(huán)的結(jié)束條件放在for循環(huán)的body當(dāng)中,如:

  1. for (int i = 0;; i++) { 
  2.     if (i > 100) break; 
  3.     ret += i; 

我們的更新條件同樣也可以放在body中:

  1. for (int i = 0; i < 100;) { 
  2.     ret += i;  
  3.     i++; 

甚至,我們可以極端一點(diǎn),三個(gè)條件都省略:

  1. int i = 0; 
  2. for (;;) { 
  3.     if (i > 100) break; 
  4.     ret += i; 
  5.     i++; 

同樣,我們更新的條件也不一定只能自增或自減,其他的任何邏輯也都可以。正因此,C++當(dāng)中的for循環(huán)是非常靈活的, 使用得當(dāng)完全可以代替while循環(huán)和do while循環(huán)。

 

不過(guò)除非必要,我們還是要盡量遵守代碼規(guī)范,不要省略條件,這樣代碼可讀性也會(huì)更好一些。

 

責(zé)任編輯:武曉燕 來(lái)源: Coder梁
相關(guān)推薦

2021-10-21 18:52:00

C++數(shù)組存儲(chǔ)

2021-10-27 16:27:20

C++指針操控

2021-10-29 09:44:50

C++指針變量

2021-11-01 15:35:31

C++自增自減

2021-12-12 18:13:54

C++This指針

2021-12-29 20:31:40

C++多態(tài)指針

2021-12-08 10:43:09

C++類(lèi)實(shí)現(xiàn)

2021-11-26 00:03:20

C++編譯常量

2021-12-09 10:56:50

函數(shù)C++原型

2021-10-20 14:03:06

C++運(yùn)算符類(lèi)型

2021-12-10 10:45:36

C++函數(shù)Stock

2021-10-26 00:19:51

C++結(jié)構(gòu)體存儲(chǔ)

2021-12-30 14:58:58

C++函數(shù)動(dòng)態(tài)

2021-10-26 15:36:17

C++枚舉值類(lèi)型

2021-11-09 10:38:16

C++Const指針

2021-12-11 19:02:03

函數(shù)C++對(duì)象

2021-11-27 11:50:09

C++靜態(tài)持續(xù)

2021-11-10 10:48:36

C++函數(shù)指針

2021-12-05 18:20:42

C++空間特性

2021-12-15 10:25:57

C++運(yùn)算符重載
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)