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

c++ - 从向量中删除 unique_ptr 的问题

我正在努力从向量中删除 unique_ptr 。我有一个向量:

我正在填写一定数量的特工。我通过以下方式进行操作:

在类构造函数列表中:

在负责生成代理的函数中:

agentQuantity 是表示某种类型的代理数量的映射。代理工厂返回 std::unique_ptr;

在程序期间,可能需要根据它的 ID 从向量中删除一些代理(然后将代理的 ID 返回到 freeID 的堆栈)。

杀代理:

为了测试这一点,我添加了 5 个将被“杀死”的代理。在大约 40% 的情况下,我得到了:

调试断言失败!向量迭代器不可解引用

我究竟做错了什么?

编辑:更多代码进行澄清。代理点阵(包含agentsVec)是在Environment 类中创建的。然后环境进入无限循环并遍历晶格中的所有位置并检查那里是否存在某些东西。如果是 -> 它会移动代理并更新其运行状况:

环境::健康更新:

Lattice::移动代理:

Agent getter(在 Environment 中用于从 Lattice::agentsVec 获取 Agent 指针)

和 AgentType 吸气剂:

0 投票
1 回答
705 浏览

c++ - C++ 标准库是否提供更紧凑和更通用的擦除删除习惯用法?

我们可以通过流行的erase-remove idiom从容器中删除一个元素/条目。但是,我们中的许多人在应用这个成语时会遇到一些问题:

  • 人们很容易陷入错别字的陷阱,例如

    或者

    /li>
  • 它甚至遵循错误的容器语义,例如 std::list不为习语选择自己的成员 std::list::remove_if()
  • 第三, usingstd::remove_if 不适用于关联容器

的范围内,我们是否有任何通用且不易出错std::erase-std::remove_if东西,或者在中是否会有这样的实用程序?std::erase_if

0 投票
4 回答
1736 浏览

c++ - 如何从 C++ 中的向量中删除所有偶数/奇数索引元素?

我是 STL 的新手,正在尝试一个简单的程序来使用 push_back 插入元素并尝试删除甚至索引的元素。

我取了 n 个元素并将其推入向量中。但是当我删除它时,我要么得到分段错误,要么得到一些不希望的输出。

如果我使用 n-1 而不是 n 它可以工作,但不会提供所需的输出。

0 投票
1 回答
191 浏览

c++ - 为什么`std::set::erase(const key_type&)`返回`size_type`而不是`bool`?

因为std::setinsert()重复,所以保证包含独特的元素。使用重载erase(const key_type&)时,它的对象将包含最多 1 个相同值的元素。因此,它可能返回 1(如果存在)或 0(否则)。

什么时候可以erase(const key_type&)返回超过1?
换句话说,返回 asize_type而不是 simple的目的是什么bool

0 投票
3 回答
164 浏览

c++ - 在 for 循环中调用函数以删除向量(或列表)中的元素

我希望我的代码的目标很明确。我想从向量(在本例中为vector_of_nodes)中消除多个对象(在称为节点的类中描述)。当我运行我的代码时,我没有从编译器得到任何错误,但是在它运行时我失败了。我确定错误出在我共享的这部分代码上。你能帮帮我吗?

0 投票
4 回答
174 浏览

c++ - 当我不关心订单并且没有重复项时,更快的擦除删除习语?

我有一个对象向量,想按值删除。但是,该值仅出现一次,我不关心排序。

显然,如果这种按值删除非常普遍,和/或数据集相当大,那么向量将不是最好的数据结构。但是,假设我已经确定不是这种情况。

需要明确的是,如果我的代码是 C,我会对以下内容感到满意:

使用 std::algos 和容器方法的“现代成语”方法似乎是:

但这应该慢得多,因为对于随机存在的元素,它是 n/2 移动和 n 比较。我的版本是 1 步和 n/2 比较。

在“现代成语”中肯定有比擦除-删除-成语更好的方法吗?如果不是,为什么不呢?

0 投票
2 回答
117 浏览

c++ - 即使谓词返回 false,remove_if 也会删除元素?

我正在写一个八叉树算法。在函数内部我遍历八叉树。我得到节点指针和球体作为输入。我检查节点是否应该保持球体然后我想将它添加到节点s object list and remove it from its parent的列表中。以下是代码

正如你所看到的,我已经operator==定义了 Sphere。

我看到remove_if即使谓词返回错误,它也会删除元素。

例如,第一次迭代它找到一个球体t并使用remove_if. 这t最后出现在向量中。现在考虑父母在其向量中仍然有3个球体,但是,当我现在去其他孩子时,我们仍然尝试t在父母中搜索并且remove_if仍然删除最后一个条目。我不明白为什么?

0 投票
1 回答
384 浏览

c++ - C++ Erase-remove Idiom on non-existant value in vector

我想从向量中删除一个元素,但不能保证该元素存在。我在网上查看过,但没有找到有关擦除删除习语如何处理不在容器中的值的信息。

我的向量是这样声明的:(在代码的其他部分中添加/修改了成员)

我想在包含 _members 作为属性的类 Group 中创建一个删除方法,以尝试从组中删除给定的人。

我目前正在使用:(要删除的人是指向 Person 对象的指针)

这将如何处理试图删除不在向量中的 Person ?理想情况下,我还想返回一个布尔值来确认删除是否成功,我目前的实现有没有办法做到这一点?

0 投票
1 回答
290 浏览

c++ - 如何从对的向量中删除作为c ++中的类的对中的值项?

我正在尝试删除所有旧披萨超过 3 天的订单:

我有这个向量对:

和这个班级订单:

我做了这样的事情:

并且不工作。

0 投票
1 回答
497 浏览

c++ - 我收到此错误:AddressSanitizer:negative-size-param: (size=-8)

从给定数组中删除给定元素时,我不断收到错误消息。

这是我的代码,我不确定我的错误在哪里:

然后我收到此错误: