C++根据限定谓词压缩数组
C++ compacting an array according to a qualification predicate
这个问题的目标是寻找更好/最好的方法来实现所需的功能。由于我只熟悉C++STL的一部分,所描述的函数可能已经是C++STL中的某种形式/模式/算法。一个更好的设计/实现,或者给我一个好的STL函数来处理这将是受欢迎的。
现在的问题是。。。
假设我有一个类型为foo
的数组和一个谓词函数pred
,比如
foo bar[100];
bool pred(const foo *p);
我想通过应用谓词pred
作为限定函数来压缩数组:不合格项(即当pred
返回false时(将从数组中删除,之后的所有元素都应该向前移动。
我的第一个想法是写一个更通用的模板,这样这个操作就可以在所有类型上完成:
template <typename IteratorType>
IteratorType CompactAnArray(IteratorType first, IteratorType last, bool (*pred)(IteratorType));
这个函数应该在[first..last(的范围内,使用预测函数pred
来完成所描述的工作。返回值应该是新形成的"Array"的结束迭代器。如果我需要知道新数组的大小,我可以使用std::distance()
来计算我的数组(比如bar
(和模板函数的返回值之间的距离。
我确实有一个简单的实现这个模板函数大约30行。然而,我想知道C++STL是否已经有了解决方案。
您想要std::remove_if
:
从范围〔first,last〕中删除所有满足特定条件的元素,并为范围的新端返回一个经过端迭代器。
移除是通过移动(通过移动分配(范围中的元素来完成的,以使不需要移除的元素出现在范围的开头。保留的元素的相对顺序保持不变,容器的物理大小保持不变。
相关文章:
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- std::condition_variable::wait()如何评估给定的谓词
- C++使用整数的压缩数组初始化对象
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 在C++中将函数压缩为两种方式
- 在C++中使用LZ4压缩目录
- 使用C++进行运行长度解压缩
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 在 Qt(C++) 中使用 QProcess 解压缩 - 提取目录问题
- 浏览压缩文件与游览解压缩它们
- 直接 2D 呈现到命令列表和打印:图片压缩
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 如何在 OpenCV c++ 中压缩 TIFF 格式的图像?
- 为 C++11 算法组合多个谓词
- 如何在C++向量中解压缩多个值
- C++根据限定谓词压缩数组