【发布时间】:2018-07-16 08:46:45
【问题描述】:
这个问题的目标是寻找更好/最好的方法来实现所需的功能。由于我只熟悉 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));
该函数应该使用谓词函数pred 在[first .. last) 的范围内完成所描述的工作。返回值应该是新形成的“数组”的结束迭代器。如果我需要知道新数组的大小,我可以使用std::distance() 来计算我的数组(比如bar)与模板函数的返回值之间的距离。
我确实有这个模板函数的简单实现,大约 30 行。但是,我想知道 C++ STL 是否已经有了解决方案。
【问题讨论】:
-
哎呀...它需要 C++17 及更高版本。我只有 C++11。叹息……