gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:41:22 25 4
gpt4 key购买 nike

我一直在寻找从 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。

关于c++ - 为什么不能使用反向迭代器从 std::map 中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com