CPP 从入门到入坟02 for_each 循环

CPP 从入门到入坟02 for_each 循环

话接上回:

for_each

最后我们会遇到一个问题

我们要怎么输出上面那串map呢?

你可能会想

cout<<'a'<<eee['a']<<" "<<'b'<<eee['b']<<" "<< ....<<eee['z']<<endl;

太过噁心且没效率
所以我们来介绍一下 for_each循环

语法:

//for( 宣告类型  变数名称 : 要被遍历的容器之变数名称)for( int it : eee)

简单来说,我今天要取出map里的东西,我需要另外一个变数
这里使用:让it 指向eee的第一个值也就是 eee['c']

而随着for的第一次结束后,it就改会指向eee的第二个值,也就是eee['e']

而随着for执行第一次、第二次直到it指向最后一个值后结束for迴圈

但这样写是错的!!

如果你细心一点就会发现,eee不是有两种类别吗(char,int)
那到底 it 指的是 key 还是 value 呢

其实两个都有指到
所以我们在for迴圈里的宣告式int会报错(it 在指向 key 时会因为类别不同而报错)

所以者时候会需要一个可以有两个tpye的宣告式了

写就是pair 顾名思义 pair 是一对所以我们只要把int改成pair就好了!

pair的用法:

pair<宣告类别1 , 宣告类别2 >

宣告类别1 跟 key 的type一样
宣告类别2 跟value的type一样

也就是这样

for(pair<char,int> it : eee) // char 指向 key (也是char类别) || int 指向 value (也是int类别)

但是我们要怎么分离 key 与 value 呢 ?

直接结论 :

it.first ==> key
irt.second ==>value

怎么记住呢

因为我们在宣告时会先宣告key所以是first ,再来才是value 所以是 second

补足程式码

for(pair<char,int> it : eee){    cout<<it.first<<" "<<it.second<<endl;}

就可以得到以下结果:

c 1e 1h 2l 2o 1 p 2

如果你懒得记这个pair 也可以用 auto

auto
也是一种宣告型态

当 变数接收到什么型态,他就是那种型态

auto test;test = 1;//int typetest = "SB";//string type

利用这个原理:

for(auto it : eee){    cout<<it.first<<" "<<it.second<<endl;}

当it.first 时型态为char
当it.second型态为int

ok,以上就是这是的内容
如果你可以看到这里真的很厉害!!

有任何的疑问欢迎在群组提出喔

接下来我会出一题简单的题目确定你已经会运用了

最下方有题示,各位可以在留言讲自己的解答喔~

题目

承接到最一开始的情境
今天我想第组程式来记录每位候选人得了几票

首先会先输入T,总共有T张票
接下来同一行会依序输入投票号码名众名称
例如 3 tom jolly ==>tom jolly 投给 3 号候选人

然后有以下规则:
投下X
同个人投票两次以上
投票号码 > 3(不含3)
视为废票

测值保证不会有平手的情况

请印出 :
当选号码
投票号码1 票数
投票号码2 票数
投票号码3 票数
废票 票数

sample input 1:

71 jason ho6 petter li2 prtter zu3 liliy hus2 sume homX jetty2 zuli ho

sample output 1:

21 12 33 1废票 2

sample input 2 :

61 jason li3 tom hom1 tom li2 jason li 1 uu jaX ii peak

sample output 2:

11 22 03 1废票 2

题示

|| 注意:map 如果value是 0,就不会有key 。输出不出东西喔||||重複投票是为废票||
3.||有人会投X,用int宣告出事||||名字跟姓氏之间有空格喔||

总之,感谢你看完这篇文章,如果有任何的错误或其他指教请告诉我喔~


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章