C++实验课要求用for each 循环来实现关联容器 map 的输出,一开始完全萌比。查了好久的资料才整理出下面的:
C++11新特性之一就是类似java的for each循环:
map<int, string> m; // 1 for ( auto &v : m) { cout<<v.first<<" "<<v.second<<endl; } // 2 lamda表达式 for_each(m.begin(),m.end(),[](map<int,string>::reference a){ //不要少了reference,不然会报错。 cout<<a.first<<" "<<a.second<<endl; }); // 3 for_each void fun(map<int,string>::reference a) //不要少了reference,不然会报错。 { cout<<a.first<<" "<<a.second<<endl; } for_each(m.begin(),m.end(),fun);
还有一种宏定义的方法:
//定义 #define foreach(container,it) \ for(typeof((container).begin()) it = (container).begin();it!=(container).end();++it) //输出 foreach(m,it) { cout<<it->first<<","<<it->second<<endl; }