C++11的for each输出

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

猜你喜欢

转载自blog.csdn.net/qq_41684261/article/details/80612933
今日推荐