iT邦幫忙

0

CPP 從入門到入墳02 for_each 循環

  • 分享至 

  • xImage
  •  

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 1
e 1
h 2
l 2
o 1 
p 2

如果你懶得記這個pair 也可以用 auto

  • auto
    也是一種宣告型態

當 變數接收到什麼型態,他就是那種型態

auto test;
test = 1;//int type
test = "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:

7
1 jason ho
6 petter li
2 prtter zu
3 liliy hus
2 sume hom
X jetty
2 zuli ho

sample output 1:

2
1 1
2 3
3 1
廢票 2

sample input 2 :

6
1 jason li
3 tom hom
1 tom li
2 jason li 
1 uu ja
X ii peak

sample output 2:

1
1 2
2 0
3 1
廢票 2

題示

  1. || 注意:map 如果value是 0,就不會有key 。輸出不出東西喔||
  2. ||重複投票是為廢票||
    3.||有人會投X,用int宣告出事||
  3. ||名字跟姓氏之間有空格喔||

總之,感謝你看完這篇文章,如果有任何的錯誤或其他指教請告訴我喔~


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言