问题标签 [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 投票
2 回答
53 浏览

c++ - 我正在尝试将向量的第 0 个元素与其他元素进行比较,以删除与其相等的其他元素,但我得到了意外的输出

所以我想将向量的第 0 个元素与其他元素进行比较,看看它们是否相等,因为我想从向量中删除该元素值的其他实例,例如 {1, 1, 2, 3, 1} 变为 { 1, 2, 3} 这是我写的代码:

我期望的输出是:

因为它应该删除除第一个之外的 1 的所有实例,但我得到的是:

最后一个 1 来自哪里,我该如何解决?

0 投票
1 回答
58 浏览

c++ - 如果我在 std::remove 函数中直接传递数组元素 ar[0] 而不是 x,为什么会得到不同的结果?

x如果不是直接传入函数ar[0],为什么会得到不同的结果?std::remove

xar[0]具有相同的价值。

0 投票
1 回答
63 浏览

javascript - Javascript中是否有等效的擦除删除习语?

如果我在 Javascript 中迭代 Array 或类似 Array 的对象时添加或删除元素,我是否需要考虑基础集合可能已更改或迭代器可能已失效?换句话说,是否有相当于Javascript 中 C++的Erase-remove 习语?

0 投票
1 回答
59 浏览

c++ - 使用erase-remove-idiom从结构的向量中删除结构的元素

我有一个结构向量,我想从具有特定值的向量中删除一个元素。我知道如何做到这一点,例如使用擦除删除的 int 值向量,但现在确定如何为结构:

这是我收到的错误:

0 投票
2 回答
310 浏览

c++ - C++ 矢量擦除功能无法正常工作

我想删除值大于 2 且小于 5 的所有元素,代码如下:

输出:3 3 3 1 2 4 5 2 4 9

问题出在哪里。

0 投票
1 回答
53 浏览

c++ - 如何从向量中删除某些指定值?

mySongs是一个向量,存储用户输入的歌曲集合。在 if 语句中,程序将根据用户输入检查向量中的元素。如果匹配,它将从向量中删除该指定值。当我寻找解决方案时,我看到有人建议使用remove/erase idiom:。但是当我在我的代码中实现时,它会继续弹出这个错误C2678 binary '==': no operator found which takes a left - hand operand of type 'Song' (or there is no acceptable conversion)

0 投票
2 回答
277 浏览

c++ - 从 std::vector 中删除重复元素但从前面开始?

如何从向量中删除重复元素但从前面开始?

所以

2 3 4 5 2 5会成为3 4 2 5

1 5 3 1会成为5 3 1

我希望该解决方案易于阅读,如果它也具有良好的性能,那就太好了。

0 投票
2 回答
169 浏览

c++ - 从向量中删除双引号C++ 98

我正在尝试从我的向量字符串值中删除双引号字符。

例如:如果我的向量字符串有值 (50,40,"50GB","40GB",60)。我正在尝试通过删除双引号(“”)来优化向量。所以我的最终向量(50,40,50GB,40GB,60)。

下面是我试图让它工作的一段代码,我得到编译问题说......请帮助我解决这个问题并达到预期的结果。

0 投票
0 回答
54 浏览

c++ - Why this program works? itrator does not invalidate after erase

I was doing this leetcode question of removing duplicates from sorted vector and return new size of vector, I came up with obvious simple approach to remove duplicates. but during my time of answering the question i found out erase() invalidate the itrator after deletion. but why i used this code it got accepted and i ran it on some other online compilers with some test cases and it also worked there. i don't understand why i can use previously initialized itrator even though it should be invalidated.

#xA;
0 投票
1 回答
313 浏览

c++ - 使用 Ranges-V3 移除标记为移除的元素

我有两个向量:

remove_flags向量包含一个与 大小完全相同的标志数组data,每个标志为 0 或 1,其中 1 表示应删除数据。

我想用来remove_flagsdata原地删除元素,即执行擦除删除习语,但基于remove_flags. 最终结果应该是data删除了元素,并希望remove_flags删除了相同的元素。

手动执行此操作很烦人,我想为此使用 Range-v3。我目前正在使用 C++17。

查看文档后,我认为我没有找到解决方案,我能想到的最接近的是:

但是操作无法对视图 zip 进行操作,因此无法编译。如果我切换ranges::actions::remove_ifranges::views::remove_if返回一个奇怪的视图对象,大概是一个实际上没有std::remove对两个向量执行等效操作的对象。

可以使用contaner_to,但这将涉及副本,我不想为了方便而支付那种不必要的罚款。我已经看到了我想要在 boost 中完成的事情,其中​​可以使用实际的 zip 对迭代器来返回两个单独的删除结果。

Range-v3 中是否可以使用这种模式?