【问题标题】:What does the following syntax with the combination of erase and remove mean? [duplicate]以下结合擦除和删除的语法是什么意思? [复制]
【发布时间】:2012-12-14 07:51:02
【问题描述】:

可能重复:
Difference between erase and remove

假设我有一个容器......以下是什么意思。

c.erase(remove(c.begin(),c.end(),99),c.end());

擦除和删除不一样吗?上面例子中的erase和remove的具体作用是什么?

【问题讨论】:

  • 查找erase remove-idiom。我知道它就在这里的某个地方。基本上,算法不知道他们正在处理的容器,所以实际上擦除它们是不可能的。
  • 我不敢相信它不是重复的。

标签: c++ containers erase


【解决方案1】:

它从容器c 中删除所有等于99 的元素。

std::remove 实际上并没有删除任何元素。它将所有感兴趣的元素移动到容器的第二部分,并返回一个迭代器,指示其中的第一部分。然后erase 成员函数采用一个迭代器范围来实际从容器中移除元素。

erase-remove idiom

【讨论】:

  • 我们可以这样写代码吗? c.erase(c.begin(),c.end(),99);
  • @Saikiran 没有,但一般情况下,你得看每个容器的接口。你当然不能用std::vectorstd::dequestd::list 做到这一点。这些都需要一个或两个迭代器,指定要删除的元素范围。
  • @juanchopanza 实际上你可以使用std::list,只是不是erase,而是list.remove(99),这可能是比更好的选择erase-remove 对块擦除的优化,不会为您购买任何列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多