问题标签 [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.
c++ - 这是在 std::vector 中存储、迭代和删除指针的好方法吗?
它分配它们,并打印正确的输出,但我不确定这是我正在做的正确事情。我只是想在向量中使用指针并在发生某种情况时删除它们,而不使用 boost 或 c++11。那么你怎么看呢?
c++ - 在 C++ 中,如何在列表中的每次连续零运行中删除除 x 之外的所有零?
对于 C++ 列表中的每次运行x
或多个连续零,我想删除运行中除x
它们之外的所有零。如果x = 0
,则删除所有零。
我在想一个 C++ 函数,它接受一个列表,list<int> L
和一个数字int x
,作为输入。
例如,让L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8}
.
- 如果
x = 0
,则返回L = {7, 12, 2, 27, 10, 8}
- 如果
x = 1
,则返回L = {7, 0, 12, 0, 2, 0, 27, 10, 0, 8}
- 如果
x = 2
,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 27, 10, 0, 0, 8}
- 如果
x = 3
,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 8}
- 如果
x = 4
,则返回L = {7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8}
(与原始相同L
) - 如果
x >= 5
,则返回原始L
值,因为没有 5 个或更多连续零的运行。
几个月前,我使用 Python ( stackoverflow.com/questions/11732554/... ) 提出了上述相同的问题,并得到了很好的答案。现在我想用 C++ 完成这个任务。
任何帮助将不胜感激。
c++ - 删除 C++ 向量中的字段
我无法正确掌握这个想法和编程这样的事情(我是初学者):我有一个向量。向量可以说元素:fieldA、fieldB、fieldC。因此,有了这些向量的数组,我想检查,从数组中的最后一个向量开始,然后转到第一个向量的方向,如果其中一个元素具有特定值,可以说 if (vect[i].字段A == 0.0)。在这种情况下,如果 (vect[i-1].fieldA == 0.0) so 具有相同的值,我想从数组中删除整个向量。有人可以为我提供一部分可视化的代码,如何创建正确的“反向迭代”循环并使用函数删除它?我正在尝试使用erase()、remove()、deque(),但我失败了。
我不想在这里弄乱我的代码。
感谢帮助!
编辑。所以我首先用向量值在我的数组中输入一个循环,然后我想从最后删除所有包含元素特定值的向量,例如 fieldA == 0.0
我想剪切数组,而不仅仅是删除向量的内容!classB 和 classA 之间存在适当的继承,因此馈送效果很好,我只想通过删除向量来解决这个问题。示例:包含 2 个元素的向量数组。输入:0,1 0,3 3,3 2,3 0,6 5,6 0,8 0,7 0,6 输出:0,1 0,3 3,3 2,3 0,6 5,6 0 ,8。结论:0,7 和 0,6 向量被删除。
c++ - 擦除向量中的元素
所以我有一个无符号整数向量(vector<unsigned int>
称为vector1
)。我有另一个我创建的结构向量(vector<struct>
称为vector2
)。vector<int>
保存一个整数,它是 的索引vector<struct>
。例如,假设vector<int = {5, 17, 18, 19}
. 这意味着vector2.at(5) == vector2.at(vector1.at(0))
。
在结构中,我有一个名为var
. 在大多数情况下,var
是错误的。我想删除所有vector1
具有var
= true的元素。
我所做的是:
唯一的问题是它不会删除所有真正的元素。我已经多次运行 for 循环以删除所有值。这是正确的行为吗?如果不是,我哪里出错了?
c++ - Should I be using erase-remove idiom here?
I have an std::vector<IRenderable*>
(_pBkBuffer
in the code below). It contains a number of static objects (at the start of the vector) that don't change, followed by a variable number of dynamic objects.
What can I put at the ??? in order to erase-remove the non-static renderables?
I know that the ??? should match all objects in the specified subset.
Should I be using erase-remove at all, or should I use another approach?
c++ - 通过 nullptrs 在 STD 列表中删除 C++ 标记对象
我想知道这是否是一种可接受的做法:
这里的想法是我们正在标记 Items 容器可能会受到外部来源的影响。当从容器中删除一个项目时,它只是设置为 nullptr 但在此之前移动到 RemovedItems。
像事件这样的东西可能会影响Items
和添加/删除项目,所以我不得不想出这个解决方案。
这看起来是个好主意吗?
c++ - Using erase-remove idiom on non-unique collections
Ideone: http://ideone.com/NTPVyE
Prints:
0, 1, 0, 1, 0, 1, 0,
1, 0, 0, 0,
Why is this happening? Shouldn't only the first element of the vector be removed?
I suppose std::remove
doesn't stop at the first element, but runs through the whole vector. Is there any way I can use the erase-remove idiom on collections with non-unique elements?
c++ - 擦除类中向量的习语问题
我正在使用包含一些控制变量的 class1 和另一个类 class2 的向量。我希望能够标记 class2 向量的各种元素(使用布尔变量“delete_me”),然后运行擦除删除习语以从向量中消除这些元素。我在网上找到了一些这样的例子,但这些是用于比我使用的更简单的数据结构。
编译时出现类型转换错误(使用 g++ v4.7.3)。
类2:
第一类:
当我编译时,我得到以下错误,引用了 prune_Intervals 例程中的单行,使用了 erase+remove_if:
错误:无法将
CMR_Spline::IsMarkedToDelete' from type
bool (CMR_Spline::)(Interval_structure&) ' 转换为类型 `bool (CMR_Spline::*)(Interval_structure&)'
对于如何编写 IsMarkedToDelete 函数和 prune_Intervals 例程以正确反映 remove-if 用于遍历向量和评估 IsMarkedToDelete 的指针,我有点困惑。
如何使用erase+remove_if 正确执行此操作,或者如果不是这样,请建议另一种方法。我被我有限的编程经验难住了。谢谢!
c++ - STL“erase-remove”成语:为什么不“resize-remove”?
众所周知,从 a 中完全删除所需项目的一个好方法std::vector
是擦除删除习语。
如上述链接中所述(截至本文发布之日),在代码中,erase-remove习惯用法如下所示:
我想知道一个resize-remove
成语在功能和性能方面是否与成语等效erase-remove
。或者,也许我遗漏了一些明显的东西?
以下resize-remove
成语是否等同于上述erase-remove
成语?
c++ - 从 std::vector 中删除任意项目列表>
我有一个向量向量,代表一个数组。我想有效地删除行,即以最小的复杂性和分配
我考虑过使用移动语义构建一个新的向量向量,仅复制未删除的行,如下所示:
这是最有效的方法吗?
编辑:我只是想我可以通过迭代地向下移动行来避免分配新数组,这可能会更有效,代码也更简单:
谢谢!