std :: mapがあり、繰り返し処理したいとします。この2つの反復の長所/短所(または主な違いは何ですか)は何ですか?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構文で最初のもののようですが、なぜ私は知りません。
'for(auto&it:m0)' - 変数itに名前を付けても、実際にはイテレータではなく、マップの要素への参照です。 –
最初のものはループ内にイテレータを与えていないので、要素参照があります。それを使用して削除することはできません。 – Galik
'm0.clear();の何が問題なのですか? –