2016-04-26 103 views
1

可以說我們有std :: map,我們希望迭代。這兩次迭代之間有哪些優點/缺點(或者主要區別)?在C++中迭代STL類11

map<string,int> m0 { { "name1", 20 }, { "name2", 30 }, { "name3", 40 } }; 
for(auto &it : m0) 
    it = m0 . erase(it); 

for (auto it=m0.begin(); it!=m0.end();) 
    it = m0.erase(it); 

第一個代碼是不是compalible,我不知道爲什麼,雖然在cppreference語法就像是第一位的。

+2

'for(auto&it:m0)' - 即使您將變量命名爲「it」,它實際上並不是迭代器,而是對地圖元素的引用。 –

+2

第一個在循環中不給你一個迭代器,它給你一個元素引用。你不能刪除使用它。 – Galik

+3

'm0.clear();'有什麼問題? –

回答

-2

使用基於範圍的for循環僅評估一次結束條件。經典循環與迭代器在每次迭代中對其進行評估。 基於範圍的循環始終迭代整個容器。使用迭代器的經典循環只能迭代容器的一部分。 範圍循環語法更簡潔明瞭。

這些是我看到它們時的主要區別。

+0

另一個人使用迭代器,其他人直接給你的元素。 – NathanOliver

+0

關於downvote(s)的善舉。我的回答究竟出了什麼問題? –