c++中m.erase()函数的奇怪行为
Strange behaviour of m.erase() function in c++?
int main(){
map<int, int> m;
m.insert({1,2});
m.insert({2,3});
m.insert({5,10});
m.erase(m.find(3));
for(auto &x: m){
cout<<x.first<<" "<<x.second<<nl;
}
}
输出:
1 2
5 10
据我所知,如果找不到关键字,m.find(3)
将迭代器返回给m.end()
。那么为什么要删除对{2,3}?
因为您违反了std::map::erase
的先决条件,所以该对被删除
iterator erase( const_iterator pos ); iterator erase( iterator pos );
迭代器位置必须有效且可取消引用。因此结束((迭代器(有效,但不可取消引用(无法使用作为位置的值
违反标准库函数的先决条件具有未定义的行为。因此,删除一个看似随机的元素完全符合这一点。
相关文章:
- C++ 结构错误"调用'erase'没有匹配函数
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何使用 erase() 函数通过索引擦除矢量?
- 字符串 erase() 函数为类似的调用给出不同的结果
- 没有 std::string .erase() 的重载函数实例
- 调用 vector.erase() 函数时指针操作无效错误
- 函数中的C erase()
- 我的erase()函数中的bug用于链接列表
- 使用std::vector中的函数erase
- 为什么std::whatever::erase()是一个方法,std::remove()是独立函数
- 模板化"find-and-erase"函数中的错误
- 在字符串中使用 erase 函数是否会使迭代器失效
- 调用 std::vector:<int>:erase(int&) 时没有匹配函数
- std::deque::erase函数的时间复杂度是多少
- Multimap -想知道.erase()函数
- 成员函数erase()在循环中不起作用
- 错误C2280:试图引用已删除的函数(试图调用vector.erase)
- 为什么在调用erase和push_back函数后,下列元素同时出现在这个c++ vector的头和尾?
- 为什么Vector中的Erase和Insert函数使迭代器失效?
- 没有与参数列表匹配的重载函数".erase"实例