gpt4 book ai didi

c++ - 为什么 std::whatever::erase() 是一个方法而 std::remove() 是一个独立函数?

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:19 25 4
gpt4 key购买 nike

erase()remove() 有什么区别?

  • std::whatever::erase - 采用范围迭代器(从头到尾),并匹配所有元素。
  • std::remove - 采用范围迭代器(从头到尾)和一个匹配删除的值。

除此之外,他们似乎在做同样的事情。即实际的“删除”或“删除”在两种情况下都是相同的(除非我弄错了)。那么,为什么其中一个是方法( vector 、集合、映射等)而另一个是自由 float 函数?

注意事项:

  • 是的,我知道还有一个 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 不可能从容器中删除元素,即使对于支持该操作的容器(并非所有容器都支持)也是如此。

关于c++ - 为什么 std::whatever::erase() 是一个方法而 std::remove() 是一个独立函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com