考虑:
#include <map>
int main()
{
std::map< int, int > m;
m[ 0 ] = 0;
m[ 1 ] = 1;
m.erase( 0 ); // ok
m.erase( 2 ); // no-op
m.erase( m.find( 2 ) ); // boom!
}
(好的,所以标题谈到删除 end() 迭代器,但 find 将返回 end() 以获得不存在的键。)
为什么删除不存在的 key OK,但删除 end() 却失败了。我在标准中看不到任何明确提及这一点?
我已经在 VS2005(在调试配置中抛出异常)和 GCC 4.0.1(100% CPU)上试过这个。是否依赖于实现?
谢谢。
最佳答案
对于 erase(key)
,标准规定所有具有值 key 的元素都被删除。当然可能没有这样的值。
对于 erase(it)
(其中 it
是一个 std::map::iterator
),标准说元素指向到它被删除 - 不幸的是,如果它是 end()
它不指向一个有效的元素并且你在 undefined behavior 土地上,你会是如果您将 end()
用于任何其他 map 操作。有关详细信息,请参阅第 23.1.2 节。
关于c++ - map.erase(map.end())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/952888/