erase-remove-idiom相关内容

有没有比 std::remove_if 更好的替代方法来从向量中删除元素?

从 std::vector 或其他容器中删除具有特定属性的元素的任务有助于实现函数式风格:为什么要为循环、内存释放和正确移动数据而烦恼? 但是,在 C++ 中执行此操作的标准方法似乎是以下习语: std::vector整数;...插入.擦除(std::remove_if(ints.begin(),ints.end(),[](int x){return x 此示例从整数向量中删除所有小于 ..
发布时间:2022-01-07 11:49:38 C/C++开发

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

好吧,我想我在这里犯了一个愚蠢的错误.我有一个 DisplayDevice3d 列表,每个 DisplayDevice3d 都包含一个 DisplayMode3d 列表.我想从 DisplayDevice3d 列表中删除所有没有任何 DisplayMode3d 的项目.我正在尝试使用 Lambda 来做到这一点,即: //如果设备没有任何模式,则将其移除.std::remove_if(MyDis ..
发布时间:2021-12-23 22:08:15 C/C++开发

C++ 按值而不是按位置擦除向量元素?

vector我的向量; 让我们说向量中的值是这个(按这个顺序): 5 9 2 8 0 7 如果我想删除包含值“8"的元素,我想我会这样做: myVector.erase(myVector.begin()+4); 因为这会擦除第 4 个元素.但是有没有办法根据值“8"擦除元素?喜欢: myVector.eraseElementWhoseValueIs(8); 还是我只需要遍历所有向量元 ..
发布时间:2021-12-21 13:20:12 C/C++开发

擦除删除习语的性能增益从何而来

我需要从满足特定条件的向量中删除所有元素. 我的第一种方法是遍历向量并对满足条件的所有元素调用 vector::erase. 据我所知,vector::erase 在这个用例中的性能很差,因为它从底层数组中删除了项目,并将向量的其余部分向前移动了一个元素(或更多,如果您擦除一系列元素).当您删除多个元素时,每次删除时,后面的元素都会移动. remove 算法获取所有要删除的元素, ..
发布时间:2021-08-30 19:20:27 C/C++开发

带有擦除元素的 C++ 嵌套 for 循环

我想相互检查一个向量的所有元素.通过检查条件,应删除元素. 一种方法是通过嵌套的 for 循环擦除元素 for (int a = 0; a 但这会在运行时影响向量及其大小. 第二种方法是在 unordered_set 中收集 b 的索引,但如何删除原始向量中具有对应索引的元素? unordered_set指数;for (int a = 0; a ..
发布时间:2021-06-07 19:07:35 C/C++开发

在C ++中使用条件擦除循环

有没有更好的书写方式: for(自动i = container.begin(); i!= container.end();){如果(条件(i)){i = container.erase(i);继续;}++ i;} 这段代码可以满足我的要求,但是感觉很糟糕. 我该如何改善? 我的容器是 std :: map ,但是通用的解决方案会很酷. 解决方案 使用擦除 + remov ..
发布时间:2021-05-30 21:14:13 C/C++开发

执行remove_if()之后的擦除()

我创建了一个函数来遍历字符串向量,并删除所有长度为3或更短的字符串.这是使用STL算法库的一课. 我在函数起作用方面遇到麻烦,但它不仅会删除长度为3或更短的字符串,而且还会将字符串"vector"附加到末尾. 输出应为 This test vector 相反,它是 This test vector vector" 我该如何解决? /* * using remo ..
发布时间:2020-07-22 19:57:09 C/C++开发