我使用std::erase_if
使用捕获的计数器从容器中删除一半元素,如下所示。用gcc10
编译的C 20
#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
int main()
{
{
std::vector<int> container(10);
std::cout << container.size() << std::endl;
std::erase_if(container, [i = 0u](auto&&...) mutable { return i++ % 2 == 0; });
std::cout << container.size() << std::endl;
}
std::cout << std::endl;
{
std::map<int, int> container;
for (int i = 0; i < 10; i++) {
container.emplace(i, i);
}
std::cout << container.size() << std::endl;
std::erase_if(container, [i = 0u](auto&&...) mutable { return i++ % 2 == 0; });
std::cout << container.size() << std::endl;
}
std::cout << std::endl;
{
std::unordered_map<int, int> container;
for (int i = 0; i < 10; i++) {
container.emplace(i, i);
}
std::cout << container.size() << std::endl;
std::erase_if(container, [i = 0u](auto&&...) mutable { return i++ % 2 == 0; });
std::cout << container.size() << std::endl;
}
}
输出出乎意料。对于向量,删除了一个额外的元素:
10
4
10
5
10
5
我打印出结果,看起来vector[1]
是意外删除的元素
虽然这通常不是erase_if的正常用法,但我仍然很好奇为什么它只发生在向量上,而不发生在其他贴图上。我猜这和迭代器类型shenanigan有关。如果有人能详细解释,我将不胜感激。
remove_if需要谓词。标准库要求谓词类型:
给定一个类型为(可能为常数)T
的glvalueu
,指定与*first
相同的对象,pred(u)
应是一个有效表达式,它等于pred(*first)
。
谓词会更改其内部状态。因此,使用同一个元素调用它两次将产生不同的结果。这意味着它不满足谓词的要求。
因此,未定义的行为随之而来。
我已经使用了一段时间,但我遇到了一个错误,其中JSoup自动删除"表"元素,找不到任何解决方案... 如果你导航到这段代码中的链接,你可以看到有多个元素“表”(例如:在“Saison 01(VF)”下,有22个包含“Episode x”的表元素),但是它们在JSOUP输出中不存在... 我试图用一个简单的获取文档,打印它(表元素在那里),用Jsoup解析它,重新打印(表元素不见了),所以我知道这不
要从复杂对象中删除某些字段。 我想删除'阴谋'
问题内容: 如果删除了DOM元素,它的侦听器也会从内存中删除吗? 问题答案: 现代浏览器 纯JavaScript 如果删除的DOM元素是无引用的(没有指向它的引用),则是垃圾收集器以及与之关联的任何事件处理程序/侦听器都会拾取该元素本身。 然而; 如果仍然有引用指向该元素,则该元素及其事件侦听器将保留在内存中。 jQuery 假设jQuery中的相关方法(例如)将以完全相同的方式起作用(考虑是使用
我有一个5页的pdf文件,每页有一个表,我需要提取。我需要从每一页提取所有的表,并将它们保存为数据帧文件,所有使用python,所以我转换了文件,使用tabula的csv文件 文件输出的主要问题。csv是指有几个额外的逗号。 实例 当我将csv文件转换成行/列时,我得到了一些行偏移 注意:dataframe应该有6列,其中包含空字段。我猜额外的逗号来自pdf文件中的空格。如何从csv文件中删除额外
问题内容: 我想从JSON中删除JSON元素或整行。 我有以下JSON字符串: 问题答案: 您可以使用splice从数组中删除元素。
主要内容:删除元素/内容,jQuery remove() 方法,实例,jQuery empty() 方法,实例,过滤被删除的元素,实例通过 jQuery,可以很容易地删除已有的 HTML 元素。 删除元素/内容 如需删除元素和内容,一般可使用以下两个 jQuery 方法: remove() - 删除被选元素(及其子元素) empty() - 从被选元素中删除子元素 jQuery remove() 方法 jQuery remove() 方法删除被选元素及其子元素。 实例 $("#div1").re