一、學習完iterator之後,遍歷容器我們會寫出這樣的**:
#include #include using namespace std;
int main() ;
vectorivec(ia, ia + sizeof(ia) / sizeof(int));
for(vector::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
return 0;
}
不過看到 vector::const_iterator iter = ivec.begin(); 覺得,這麼一長串真的好嗎?
c++11有auto關鍵字,直接for(auto iter = iver.begin; ...)倒是方便了許多。
二、 c++ stl有乙個模板函式for_each,可用於遍歷。配合function和function object(仿函式)功能強大。(不過比python的for還是複雜了不少啊!可惜c++沒有像python一樣簡潔的for i in list:...)
for_each用於逐個遍歷容器元素,它對迭代器區間[first,last)所指的每乙個元素,執行由單引數函式物件f所定義的操作。
for_each的原型如下:
templatefunction for_each(inputiterator beg, inputiterator end, function f)
1、最簡單的for_each配合function操作。
#include #include #include #include using namespace std;
void print(int& elem)
int main() ;
vectorivec(ia, ia + sizeof(ia) / sizeof(int));
for_each(ivec.begin(), ivec.end(), print);
}
可以把處理邏輯寫在print裡面,比如過濾,判斷,輸出等等。
2、也可以配合function object進行操作:
#include #include #include #include using namespace std;
struct print
};int main() ;
vectorivec(ia, ia + sizeof(ia) / sizeof(int));
for_each(ivec.begin(), ivec.end(), print());
return 0;
}
3.c++ 11 lambda表示式大大的簡化了編寫函式的麻煩,很多簡單的操作直接可以使用匿名函式來處理。這樣for_each等模板函式用的更廣泛了。
#include #include #include #include using namespace std;
int main() ;
vectorivec(ia, ia + sizeof(ia) / sizeof(int));
for_each(ivec.begin(), ivec.end(), [&](int i));
return 0;
}
C foreach迴圈例項詳解
在編寫c 時,我們會發現使用foreach迴圈會比使用for迴圈方便,不需要進行資料型別的強制轉換,不需要使用下標 通過幫助文件的檢視可知,如果要對乙個物件使用foreach進行迴圈的話則此物件的型別必須擁有getenumerator方法,此方法是在ienumerable介面下的,但是否實現此介面無...
C for each函式 for each模板
for each 函式 void for each int int ref 10 int main int argc,char argv for each int array return0 for each模板 function for each inputiterator first,input...
運用c foreach迴圈顯示
慣例 我是溫浩然 先說一下兩種的區別,上圖,改版之前。後來的效果是 很明顯的,後來的是分組織結構顯示的,這裡用到的技術,就是c標籤 先貼 foreach中巢狀if其中再巢狀foreach。後台傳到前台的是babystages這個list集合,在前台中,通過c foreach來進行迴圈解析,就會生出第...