为什么不能使用反向迭代器从 std::map 中删除元素?

Why is it not possible to remove elements from a std::map using reverse iterators?

我一直在寻找从 std::map 中删除最后一个元素的最有效和最具表现力的方法。我试过了:

#include <map>

int main()
{
    std::map<int, int> m;
    m.insert(std::make_pair(1,1));
    m.erase(m.crbegin());
    return 0;
}

代码无法编译,因为 std::map::erase 可以采用 only std::map::const_iterator

此外,在 C++11 之前,它也可能需要 std::map::iterator 秒,但出于某种原因,此功能也被删除了。

这些限制背后的动机是什么?

erase() 现在需要 const_iterator 秒才能使 const_iterator 真正有用。 iterator 可转换为 const_iterator,因此原有功能不受影响。

reverse_iterator是迭代器适配器;它公开了一个 .base() 成员函数来获取底层迭代器,您可以将其传递给容器成员函数。也就是说,crbegin().base()end(),将 end() 传递给 erase() 是 UB。