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