我一直在寻找从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
,但由于某种原因,此功能也已被删除。
这些限制背后的动机是什么?
答案 0 :(得分:2)
erase()
现在需要const_iterator
来使const_iterator
真正有用。 <{1}}可转换为iterator
,因此原始功能不受影响。
const_iterator
是一个迭代器适配器;它公开了一个reverse_iterator
成员函数来获取底层迭代器,您可以将其传递给容器成员函数。也就是说,.base()
为crbegin().base()
,将end()
传递给end()
为UB。