考虑:
#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!
}
Run Code Online (Sandbox Code Playgroud)
(好的,所以标题讨论了擦除end()迭代器,但是find会返回end()以查找不存在的键.)
为什么擦除不存在的键OK,但擦除end()会爆炸.我在标准中没有看到任何明确的提及?
我在VS2005上尝试了这个(在调试配置中抛出异常)和GCC 4.0.1(100%CPU).它是依赖于实现的吗?
谢谢.