自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[432273]]

大家好,我是梁唐。

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

想要追求更好閱讀體驗的同學,可以點擊文末的「閱讀原文」,訪問github倉庫。

for 循環(huán)

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

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

基礎用法

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

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

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

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

寫成通用形式就是:

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

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

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

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

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

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

進階用法

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

  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; 

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

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

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

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

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

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

  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++; 

甚至,我們可以極端一點,三個條件都省略:

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

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

 

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

 

責任編輯:武曉燕 來源: Coder梁
相關推薦

2021-10-21 18:52:00

C++數(shù)組存儲

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++實現(xiàn)

2021-12-09 10:56:50

函數(shù)C++原型

2021-11-26 00:03:20

C++編譯常量

2021-10-20 14:03:06

C++運算符類型

2021-10-26 00:19:51

C++結構體存儲

2021-12-10 10:45:36

C++函數(shù)Stock

2021-12-30 14:58:58

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

2021-10-26 15:36:17

C++枚舉值類型

2021-11-27 11:50:09

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

2021-11-09 10:38:16

C++Const指針

2021-12-11 19:02:03

函數(shù)C++對象

2021-11-10 10:48:36

C++函數(shù)指針

2021-12-15 10:25:57

C++運算符重載

2021-12-05 18:20:42

C++空間特性
點贊
收藏

51CTO技術棧公眾號