1

マップの最後の 2 つを除くすべてのエントリを消去したいと考えています。どうすればそれができますか?次のように?

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

mymap.erase (firstit ,lastit);
4

2 に答える 2

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);
于 2013-09-25T10:00:06.160 に答える
0

マップに少なくとも 2 つのエントリがあると仮定すると、問題ないように見えます。

--lastit;lastit--;後者は一時的な反復子を作成する必要があるため、より効率的であると主張されることがあります。

于 2013-09-25T09:50:02.613 に答える