问题标签 [erase-remove-idiom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
536 浏览

c++ - 从容器中删除元素的单语句方法

是否有一种算法可以从容器中删除元素,如下面的代码中发生的那样?

0 投票
3 回答
1855 浏览

c++ - Erase-remove 习惯用法:remove return past-the-end-iterator 时会发生什么?

0 投票
1 回答
7953 浏览

c++ - boost绑定编译错误

我收到如下错误:

有人可以告诉我我做错了什么吗?

0 投票
4 回答
425284 浏览

c++ - C++ Erase vector element by value rather than by position?

#xA;

and lets say the values in the vector are this (in this order):

#xA;

If I wanted to erase the element that contains the value of "8", I think I would do this:

#xA;

Because that would erase the 4th element. But is there any way to erase an element based off of the value "8"? Like:

#xA;

Or do I simply just need to iterate through all the vector elements and test their values?

0 投票
1 回答
571 浏览

c++ - 用于在嵌套容器中删除的擦除删除习语?(删除外部的;C++ STL)

当我从像向量这样的非嵌套容器中删除时,我正在做类似的事情:

这就是所谓的erase-remove idiom

现在,我有第二个数据结构vector<vector<unsigned int> >or deque<vector<unsigned int> >,我想根据 bitset 删除外部容器元素(它本身就是内部类型的容器)。

  • 是否可以在此嵌套容器类型上使用擦除删除习语?
  • 如果是,怎么可能?
  • 有限制吗?(比如:vec 的 vec 是可能的,但不是 vec 的双端队列)?

我的第一个也是幼稚的方法如下。我假设 remove_if 是按顺序迭代元素并一个接一个地决定的。这是一个错误的假设吗?

结果是错误的,因此我在这里寻找正确的解决方案。我想我假设了一些无法保证的事情。对我来说,基本问题如下:如何获取内部容器的身份以检查是否要移除。.
我在上面发布的幼稚方法只是计算并假设顺序处理。

谢谢你的帮助。

萨沙

更新和警告

对于向量 o 向量,Stas解决方案效果很好。但我认为这个解决方案不适用于向量的双端队列,因为双端队列不是以连续的方式保存的。这意味着,仿函数中索引的计算失败。

任何人都可以验证吗?

0 投票
4 回答
45587 浏览

c++ - std::remove_if - lambda,不从集合中删除任何内容

好吧,我想我在这里犯了一个愚蠢的错误。我有一个 DisplayDevice3d 列表,每个 DisplayDevice3d 都包含一个 DisplayMode3d 列表。我想从 DisplayDevice3d 列表中删除没有任何 DisplayMode3d 的所有项目。我正在尝试使用 Lambda 来做到这一点,即:

尽管在 MyDisplayDevices 中的 6 个 DisplayMode3d 中,只有 1 个在其 Modes 集合中有任何 DisplayMode3d,但没有从列表中删除任何内容。

我在这里犯了什么重大错误?

编辑:

好吧,我的错误是我应该使用 MyDisplayDevices.remove_if 而不是 std::remove_if,但是下面的答案对于使用 std::remove_if :p 是正确的。

0 投票
2 回答
314 浏览

c++ - 如何使用 C++ 中的删除命令删除句子中的空格?

我得到一个文件作为输入,我像这样读取第一行(引号标记开始和结束,但不在文件中):

当我像这样使用删除命令时:

我得到的输出为:

我只需要输出1,2.0,3.0,4.0。这里有什么问题?

0 投票
5 回答
8210 浏览

c++ - 根据索引移除向量元素

我想根据索引删除向量的元素,比如所有偶数索引元素。我已阅读有关擦除删除习语的信息,但看不到如何应用它。这是我尝试过的:

这会擦除整个向量。我希望只删除已被删除算法标记的元素。

然后我尝试了这个

这再次不起作用,因为在删除时存在问题,索引似乎在迭代向量时发生了变化。完成此任务的正确方法应该是什么。

0 投票
2 回答
18392 浏览

c++ - 执行 remove_if() 后擦除()

我创建了一个函数来遍历字符串向量并删除长度为 3 或更短的任何字符串。这是使用 STL 算法库的一课。

我在函数工作时遇到了麻烦,但它不仅会删除长度为 3 或更短的字符串,而且还会将字符串“vector”附加到末尾。

输出应该是

相反,它是

我该如何解决?

0 投票
3 回答
4579 浏览

c++ - 从 lambda 访问 for_each 迭代器

是否可以访问 std::for_each 迭代器,所以我可以使用 lambda 从 std::list 中擦除当前元素(如下所示)

我读过关于使用 [](typename T::value_type x){ delete x; } 这里关于 SO,但 VS2010 似乎不喜欢这个声明(下划线 T 作为错误源)。