2013-09-25 48 views
1

我想擦除地圖中除最後兩個之外的所有條目。我怎麼能這樣做?如下所示?C++擦除範圍

std::map<int, obj>::iterator firstit = mymap.begin(); 
std::map<int, obj>::iterator lastit = mymap.end(); 
lastit--; 
lastit--; 

mymap.erase (firstit ,lastit); 

回答

3

您需要測試iterator是否有效,如果您的mymap的元素少於2個,那麼您的代碼會調用未定義的行爲。

auto it = mymap.begin(); 
auto size = mymap.size(); 

if (size > 2) 
{ 
    std::advance(it, size - 2); 
} 

mymap.erase(mymap.begin(), it); 
0

對我來說看起來很好,假設您在地圖中至少有兩個條目。

--lastit;有時聲稱比lastit--;更有效,因爲後者必須創建一個臨時迭代器。