erase()和之间有什么区别remove()?
std::whatever::erase - 获取范围迭代器(first-last),并匹配所有元素.std::remove - 获取范围迭代器(first-last)和匹配删除的值.除此之外,看起来他们做同样的事情.即在两种情况下实际的"擦除"或"移除"都是相同的(除非我弄错了).那么,为什么其中一个是(矢量,集合,映射等)方法,另一个是自由浮动函数?
笔记:
erase()需要一个迭代器,但你也可以std::remove()使用相同的语义.擦除或删除是不一样的.
erase 实际上从集合中删除项目.
std::remove 使集合保持与开始时相同的大小,但是压缩集合中的项目,因此具有您想要删除的值的那些已被具有其他值的集合中的值覆盖.
换句话说,如果你开始使用1, 2, 1, 3,并且remove(..., 1)你最终得到一个包含的集合2, 3, x, x,其中x表示一些未知值(可能是一个移动的值,所以如果它们是字符串,它们可能会变成空字符串).
当它完成时,它将迭代器返回到第一个的位置x.如果您想要从集合中实际删除这些项目,则可以调用collection.erase(returned_iterator, collection.end())(也就是删除/擦除习语).
如果你关心为什么事情是这样的,一个原因是std::remove与迭代器一起工作.一个迭代允许访问的元素在一个容器中,但不与周围的容器本身.因此,不可能std::remove从容器中擦除元素,即使对于支持该容器的容器(而不是所有容器)也是如此.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |