假設我有一個std :: map,並且想要用鍵X和每個具有更高鍵的項來做某件事(記住,這是一個有序的映射)。代碼顯而易見且清晰:如何在乾淨的代碼中向後移動雙向迭代器?
auto iter = mymap.find(X);
while (iter != mymap.end()) {
process(*iter);
iter++;
}
或者可能更好的是,std::for_each(mymap.find(X), mymap.end(), process)
。
但是,如果我的任務是使用密鑰X對每個項目執行處理,並按下一個鍵的順序,我找不到表示意圖的乾淨編碼模式。
auto iter mymap.find(x);
if (iter != mymap.end()) {
iter++; // Go forward...
while (iter != mymap.begin()) {
iter--; // ... so we can go backwards
process(*iter);
}
}
如果我不想做他們以相反的順序,這將是很容易通過增加的std ::地圖返回的迭代器:: find()方法,然後使用std :: for_each的(MyMap中。 begin(),incremented_iter,process)。
雙向迭代器都無法扭轉的迭代器,所以無法使用mymap.rend()
爲「關開始」來比較在一段時間()循環。
在C++ 11中(或在+14或+17中有沒有乾淨的方法來做到這一點,所以我會有一些期待的)?
'reverse_iterator' –