【发布时间】:2015-05-15 10:54:22
【问题描述】:
我一直在寻找从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::iterators,但由于某种原因,此功能也被删除了。
这些限制背后的动机是什么?
【问题讨论】:
-
const_iterator 是否从迭代器定义转换构造函数?
-
@jschultz410,哦,是的,这可能是 C++11 中弃用的原因。
-
如果是这样,我只是在这里推测,那么这些函数会更通用,并且不会违反 const_iterators 的 const'ness,因为您不是在更改值本身,而是将其删除来自收藏。
标签: c++ c++11 associative-array c++-standard-library