C++11新特性- 范圍for語(yǔ)句
C++的新風(fēng)格
如果是10年前,C++語(yǔ)言也好,程序員也好,應(yīng)該是相當(dāng)自信的。但是近年來(lái),各種新語(yǔ)言,新架構(gòu)不斷涌現(xiàn),C++的地位雖然談不上動(dòng)搖,但是許多場(chǎng)合被人搶了風(fēng)頭也是事實(shí)。因此C++的代碼風(fēng)格也在發(fā)生改變。今天的范圍for語(yǔ)句就算是一個(gè)例子。
功能介紹
循環(huán)最常見(jiàn)的的場(chǎng)景就是對(duì)數(shù)據(jù)集合的每一個(gè)元素進(jìn)行某種操作。C++11之前,大致是這樣的程序:
?
int a[] = {1, 2, 3, 4};
int sum = 0;
for(int i = 0 ; i < sizeof(a)/sizeof(a[0]); ++i){
????????sum += a[i];
}
或者是這樣
vector
int sum = 0;
for(auto it = v.begin(); it != v.end(); it++){
????sum += *it;
}
可以看出,雖然目的只是對(duì)數(shù)據(jù)集合中的每個(gè)元素進(jìn)行求和,還是要做如下幾件事:
定義和初始化循環(huán)變量
判斷循環(huán)條件
調(diào)整循環(huán)變量
C++程序員已經(jīng)熟悉了這些過(guò)程,但還是麻煩了一些。大概是因?yàn)檫@個(gè)原因,C++11引入了范圍for語(yǔ)句:
int?array[]{1,?2,?3,?4};
int?sum?=?0;
?for(int a : array){
?????sum?+=?a;
}
vector
int?sum?=?0;
for(int?v:?vect){
????sum?+=?v;
}
for(int v : vect)讀作“對(duì)于vect中的每一個(gè)v”。應(yīng)該說(shuō),程序簡(jiǎn)練了不少。
運(yùn)用條件
是不是所有地?cái)?shù)據(jù)集合可以交給范圍for遍歷呢?答案是否定的。
數(shù)據(jù)v被范圍for遍歷的條件是,該數(shù)據(jù)支持v.begin()/v.end()或者是begin(v)/end(v)并返回一個(gè)迭代器。STL中的容器都滿足上述條件。對(duì)于內(nèi)置類型的數(shù)組來(lái)講C++編譯器提供了等同于上述接口的機(jī)制,因此也可以在范圍for中使用。
作者觀點(diǎn)
C++變得越來(lái)越不像C++了,不知道是好事還是壞事。





