c ++有没有可能`map.end()`在`std::map`的生命周期内改变
Posted
技术标签:
【中文标题】c ++有没有可能`map.end()`在`std::map`的生命周期内改变【英文标题】:c++ is there any possibility that `map.end()` can change during the life time of a `std::map` 【发布时间】:2021-02-18 06:47:58 【问题描述】:只是想知道我是否有这样声明的地图,
map<int, int> my_map;
并将end()
迭代器分配给一个变量,并且永不改变,
auto end_it = my_map.end()
然后我将通过多次擦除和插入my_map
来更改my_map
,
在my_map
的生命周期内,以下内容是否始终保持正确?
end_it == my_map.end()
【问题讨论】:
这能回答你的问题吗? Iterator invalidation rules 另见Is end() required to be constant in an STL map/set? 【参考方案1】:std::map::insert 保证:
没有迭代器或引用无效。
std::map::erase 保证:
对已擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。
因此结束迭代器应该保持有效。如果您使用任何其他操作,您应该检查它是否可能使迭代器无效。
【讨论】:
以上是关于c ++有没有可能`map.end()`在`std::map`的生命周期内改变的主要内容,如果未能解决你的问题,请参考以下文章
JFrame(用C++11特性重构系列——DllParser的实现)
C++17,制作一个使用依赖于模板参数的 std::variant 的可变参数模板?