C++實驗課要求用for each 循環來實現關聯容器 map 的輸出,一開始完全萌比。查了好久的資料才整理出下面的:
C++11新特性之一就是類似java的for each循環:
1 map<int, string> m; 2 // 1 3 for ( auto &v : m) 4 { 5 cout<<v.first<<" "<<v.second<<endl; 6 } 7 8 // 2 lamda表達式 9 for_each(m.begin(),m.end(),[](map<int,string>::reference a){ 10 cout<<a.first<<" "<<a.second<<endl; 11 }); 12 13 // 3 for_each 14 void fun(map<int,string>::reference a) //不要少了reference,不然會報錯。 15 { 16 cout<<a.first<<" "<<a.second<<endl; 17 } 18 for_each(m.begin(),m.end(),fun);
還有一種宏定義的方法:
1 //定義 2 #define foreach(container,it) \ 3 for(typeof((container).begin()) it = (container).begin();it!=(container).end();++it) 4 //輸出 5 foreach(m,it) 6 { 7 cout<<it->first<<","<<it->second<<endl; 8 }
