c++11中,为啥可以用const_iterator删除map/multimap中的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11中,为啥可以用const_iterator删除map/multimap中的元素相关的知识,希望对你有一定的参考价值。

c++ stl中,const_iterator是被设计用来只读访问容器中的元素的,像在vector, list之类的容器中,是无法使用erase()删除掉const_iterator指向的元素的, 可是为什么在map/multimap中却可以?
看<stl_multimap.h> 中的源代码也确实有以下函数, 支持用const_iterator执行erase操作(似乎是从c++11起才支持这种做法), 而vector, list却没有这样的函数:
iterator
erase(const_iterator __position)
是有什么特殊缘故吗?

用的是GNU GCC 4.8.2(SGI STL)

参考技术A for(std::map>::iteratoriter=m_mapName.begin();iter!=m_mapName.end();)std::vector&vec=iter->second;//对vec可以进行任意的操作,删除一个元素自然不在话下追问

你好,我想问的是const_iterator(e.g. std::map::const_iterator), 普通的iterator当然可以进行任意操作

参考技术B #include#include#includeintmain()mapwords;map::iteratorit=words.begin();for(;it!=words.end();++it)coutfirstsecond<

以上是关于c++11中,为啥可以用const_iterator删除map/multimap中的元素的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++11 中捕获的变量在捕获中具有不同的值?

在 C++11 标准中,为啥要依赖 char 类型的实现?

C语言全排列问题为啥用指针比数组慢很多?

为啥用 C 复制文件比 C++ 快得多?

为啥 C11 或 C++11 中没有 ASCII 或 UTF-8 字符文字?

为啥这个 C 语言中的 SIMD 示例代码可以用 minGW 编译,但可执行文件不能在我的 Windows 机器上运行?