1
我想擦除地圖中除最後兩個之外的所有條目。我怎麼能這樣做?如下所示?C++擦除範圍
std::map<int, obj>::iterator firstit = mymap.begin();
std::map<int, obj>::iterator lastit = mymap.end();
lastit--;
lastit--;
mymap.erase (firstit ,lastit);
我想擦除地圖中除最後兩個之外的所有條目。我怎麼能這樣做?如下所示?C++擦除範圍
std::map<int, obj>::iterator firstit = mymap.begin();
std::map<int, obj>::iterator lastit = mymap.end();
lastit--;
lastit--;
mymap.erase (firstit ,lastit);
您需要測試iterator
是否有效,如果您的mymap
的元素少於2個,那麼您的代碼會調用未定義的行爲。
auto it = mymap.begin();
auto size = mymap.size();
if (size > 2)
{
std::advance(it, size - 2);
}
mymap.erase(mymap.begin(), it);
對我來說看起來很好,假設您在地圖中至少有兩個條目。
--lastit;
有時聲稱比lastit--;
更有效,因爲後者必須創建一個臨時迭代器。