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将会自动做啥操作(也就是会怎么变动)?的主要内容,如果未能解决你的问题,请参考以下文章