c++ STL map 中erase()后++会指向那个元素?以及erase后map将会自动做啥操作(也就是会怎么变动)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ STL map 中erase()后++会指向那个元素?以及erase后map将会自动做啥操作(也就是会怎么变动)?相关的知识,希望对你有一定的参考价值。

参考技术A map的erase()有三个重载函数,你说的是哪个? 如果是根据key值来删除,成功返回1,失败返回0.如果根据迭代器删除单个,迭代器要后++,因为删除了的迭代器会失效,所以要指向下一个。如果是根据迭代器删除一片的话,要重新指定迭代器。追问

while(it != themap.end())

if(it->first == 2)
themap.erase(it);
coutfirstsecond<<endl;
it++;

将it++放在cout之前和放在cout后面输出效果为什么差距那么大?

追答

map 的存储结构是红黑树,虽然删除了这个节点,但是这个节点的位置是存在的,当迭代器增加后会指向下一个节点。所以输出的内容肯定不一样。看完之后记得采纳。

本回答被提问者和网友采纳

C++ STL 中 remove 和 erase 的区别

remove是逻辑上的删除,实际所在容器分配的内存大小没改变,只是把删除的元素移到了容器的最后并且重置end指向的位置。如果你知道容器末尾的指针的话,即使某元素remove了也查得到。 erase是物理上的删除,容器大小被改变 参考技术A remove只是把你要删除的元素集中起来方便用erase一次性删掉

以上是关于c++ STL map 中erase()后++会指向那个元素?以及erase后map将会自动做啥操作(也就是会怎么变动)?的主要内容,如果未能解决你的问题,请参考以下文章

stl中map的erase具体详解

c++stl里面的map.erase(...)

C++ STL unordered_map详解

正确使用stl map的erase方法

C++ STL中erase函数的用法 求助~~

C++ STL中erase函数的用法 求助~~